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。有没有办法保留执行命令中未引用的列?

编辑:由于我的无能,尝试了很多不同的东西,但没有任何效果。在循环中结束了以下内容,只是得到了一个错误:

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(捕获主键上的错误)。适用于我正在做的事情。真的似乎应该有一种优雅的方式。UPSERT。任何。

于 2012-08-31T03:55:06.167 回答