我使用我编写的python脚本将一些csv文件中的数据插入到我的SQLite3数据库中。当我运行脚本时,它会将第一行插入数据库,但在尝试插入第二行时会出现此错误:
sqlite3.IntegrityError: columns column_name1, column_name2 are not unique.
在csv文件的前两行中,column_name1和column_name2中的值是相同的。但是,这对我来说似乎有点奇怪,因为阅读此错误表明它表示对一个或多个数据库列的唯一性约束。我使用SQLite Expert Personal检查了数据库详细信息,并且它没有在当前表上显示任何唯一性约束。此外,我输入的字段都没有指定主键。似乎数据库会自动分配这些。有关可能导致此错误的原因的任何想法?感谢。
import sqlite3
import csv
if __name__ == '__main__' :
conn = sqlite3.connect('ts_database.sqlite3')
c = conn.cursor()
fileName = "file_name.csv"
f = open(fileName)
csv_f = csv.reader(f)
for row in csv_f:
command = "INSERT INTO table_name(column_name1, column_name2, column_name3)"
command += " VALUES (%s, '%s', %s);" % (row[0],row[1],row[2])
print command
c.execute(command)
conn.commit()
f.close()
答案 0 :(得分:2)
如果SQLite报告了IntegrityError错误,那么很可能在这两列上确实存在PRIMARY KEY或UNIQUE KEY,并且当您声明没有时,您就错了。确保您真正查看数据库的同一实例。
另外,不使用字符串插值来编写SQL语句。它是危险的,也很难纠正(因为你可能知道你在其中一个字段上有单引号)。在SQLite中使用参数化语句非常非常简单。
答案 1 :(得分:0)
错误可能是由于INSERT INTO语句中的列名重复造成的。我猜这是一个拼写错误,你的意思是INSERT INTO语句中的column_name3。