[英]SQLite3 Columns Are Not Unique
我正在使用编写的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()
如果SQLite报告了IntegrityError错误,则很可能在这两列上确实有一个PRIMARY KEY或UNIQUE KEY,并且在声明没有错误的情况下会误认为。 确保您确实在查看数据库的同一实例。
此外,使用串插不写SQL语句。 这很危险,而且也很难获得正确的答案(您可能知道考虑到其中一个字段有单引号)。 在SQLite中使用参数化语句非常非常简单。
该错误可能是由于INSERT INTO语句中的列名重复。 我猜这是一个错字,而您在INSERT INTO语句中的意思是column_name3。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.