Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLite3列不是唯一的_Python_Database_Csv_Sqlite - Fatal编程技术网

Python SQLite3列不是唯一的

Python SQLite3列不是唯一的,python,database,csv,sqlite,Python,Database,Csv,Sqlite,我正在使用我编写的python脚本将一些csv文件中的数据插入SQLite3数据库。当我运行脚本时,它会将第一行插入数据库,但在尝试插入第二行时会出现以下错误: sqlite3.IntegrityError: columns column_name1, column_name2 are not unique. 的确,列_name1和列_name2中的值在csv文件的前两行中是相同的。但是,这对我来说似乎有点奇怪,因为阅读有关此错误的信息表明,它表示数据库的一个或多个列上存在唯一性约束。我使用S

我正在使用我编写的python脚本将一些csv文件中的数据插入SQLite3数据库。当我运行脚本时,它会将第一行插入数据库,但在尝试插入第二行时会出现以下错误:

sqlite3.IntegrityError: columns column_name1, column_name2 are not unique.
的确,列_name1和列_name2中的值在csv文件的前两行中是相同的。但是,这对我来说似乎有点奇怪,因为阅读有关此错误的信息表明,它表示数据库的一个或多个列上存在唯一性约束。我使用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()

错误可能是由于INSERT INTO语句中的列名重复造成的。我猜这是一个输入错误,您指的是INSERT INTO语句中的列3。

如果SQLite报告了IntegrityError错误,则很可能这两列上确实存在主键或唯一键,并且您在声明没有主键或唯一键时出错。确保您实际上正在查看同一个数据库实例


另外,不要使用字符串插值编写SQL语句。这很危险,而且很难得到正确的答案(考虑到其中一个字段上有单引号,您可能知道这一点)。在SQLite中使用参数化语句非常简单。

是的。事实上,出于隐私考虑,我只是用这些来替换真实的列名。事实上,这些标签都是独一无二的。我把它改回去以消除任何歧义。谢谢。我不熟悉我正在使用的SQLite GUI。我得出了错误的结论。为什么这篇文章被否决了?我认为它显示了足够的研究背景,并且对问题有了清晰的解释。我当然不只是复制粘贴我的代码然后问“这有什么问题?”