sqlite3 INSERT OR REPLACE覆盖字段?

时间:2012-08-31 00:54:09

标签: python sqlite

我有一本我已经使用了几年的成绩册。我试图稍微清理一下,因为一位同事想要使用它,但它并不是真正的用户准备,只是个人准备好了。无论如何,我试图自动更新我的学生列表。我尝试了以下方法:

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更新所有其他字段。我放弃了一会儿。太沮丧了。

1 个答案:

答案 0 :(得分:0)

好吧,永远不会想出INSERT OR REPLACE格式。结束刚刚运行和UPDATE查询,然后是INSERT(捕获主键上的错误)。适用于我正在做的事情。真的好像应该有一种优雅的方式。 UPSERT。不管。