0

私は数年間使用した成績表を持っています。同僚が使用したいので少しクリーンアップしようとしていますが、実際にはユーザーの準備ができておらず、個人的に準備ができています。とにかく、私は自分の学生リストの更新を自動化しようとしていました。私は次のことを試しました:

import csv
import sqlite3
f = csv.reader(open('students.csv'))

db = sqlite3.connect('gradebook.db')
cursor = db.cursor()

for row in f:
    print row
    cursor.execute('INSERT OR REPLACE INTO students (id, name, class, gender, birthday, something, period, section_number, subject, begin_date, end_date, status, absents, tardies) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)', row)

db.commit()
db.close()

これは新入生には有効ですが、データベースには、学校からのCSVダンプ(メモ、現在の章など)で参照されていない列もいくつかあります。上記のコードを実行すると、参照されていない列にあるものはすべてNULLに設定されます。executeコマンドで参照されていない列を保持する方法はありますか?

編集:私の無能さを通して、たくさんの異なることを試みましたが、何もうまくいきませんでした。ループで次のようになってしまい、エラーが発生しました。

cursor.execute('INSERT OR REPLACE INTO students (notes, id, name, class, gender, 
    birthday, something, period, section_number, subject, begin_date, end_date, 
    status, absents, tardies) VALUES ((select notes from students where id = 
    row[0]),?,?,?,?,?,?,?,?,?,?,?,?,?,?)', row)

保存しようとしているのはメモです。他のすべてのフィールドは、学生のIDに基づいて更新できます。しばらくあきらめています。欲求不満になりすぎます。

4

1 に答える 1

0

まあ、INSERT OR REPLACE フォーマットを理解することはできませんでした。実行中の UPDATE クエリとそれに続く INSERT (主キーのエラーをキャッチ) で終わりました。私がやっていることのために動作します。本当にエレガントな方法があるはずです。アップサート。なんでもいい。

于 2012-08-31T03:55:06.167 に答える