尝试在按下按钮时将列表的第二个元素插入数据库,但会不断出现错误
testing=connect(database='test.db')
test_db=testing.cursor()
test_db.execute('DELETE FROM test_table;')
for zz in range(0, len(list), 2):
print(titles[zz])
query='INSERT INTO test_table (test_name) VALUES('+list[zz]+')'
query2='INSERT INTO test_table (test_date) VALUES('+list2[zz]+')'
test_db.execute(query)
test_db.execute(query2)
这是我收到的错误
Exception in Tkinter callback
Traceback (most recent call last):
sqlite3.OperationalError: unrecognized token: "3D"
答案 0 :(得分:2)
首先,您直接在查询字符串中写入参数值,这被认为是不好的做法。正确的方法是使用参数化查询。接下来,当您使用2条插入语句时,您将把每部电影分成2个数据库行,而不可能将标题和日期联系起来。最后,这是导致错误的原因,您必须做的是,SQL字符串必须用单引号引起来。
因此,该错误的直接解决方法是:
query="INSERT INTO test_table (test_name) VALUES('"+titles[zz]+"')"
query2="INSERT INTO test_table (test_date) VALUES('"+dates[zz]+"')"
但是恕我直言,您应该做的是,通过一个简单的参数化查询:
query='INSERT INTO test_table (test_name, test_date) VALUES(?,?)'
test_db.execute(query, (titles[zz], dates[zz]))
甚至更好,通过对所有插入仅准备一次查询:
test_db.execute('DELETE FROM test_table;')
query='INSERT INTO test_table (test_name, test_date) VALUES(?,?)'
test_db.execute-many(query, [(titles[zz], dates[zz])
for zz in range(0, len(titles), 2)]
答案 1 :(得分:0)
不确定您使用的是哪个版本的python,但我认为这对2和3均适用;
testing=connect(database='test.db')
test_db=connection.cursor()
test_db.execute('DELETE FROM test_table;')
for zz in range(0, len(titles), 2):
query='INSERT INTO `test_table`(`test_name`, `test_date`) VALUES ({},{})'.format(titles[zz],dates[zz])
test_db.execute(query)
缺少一些上下文,例如您的表结构,所以我不确定它是否可以工作。