python - 尝试将变量插入数据库时不断出错
问题描述
按下按钮时尝试将列表的每隔一个元素插入数据库但不断出错
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"
解决方案
首先,您直接在查询字符串中写入参数值,这被认为是一种不好的做法。这里正确的方法是使用参数化查询。接下来,当您使用 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)]
推荐阅读
- dns - 从另一个域加载脚本/静态资源的可能原因
- ios - Where can i change Rating for Ready For Sale app?
- amazon-web-services - How to connect to EC2 instance via Jenkins pipeline?
- java - JavaFX GUI freezes within Platform.runLater
- google-app-engine - 运行在谷歌应用引擎中安排的应用的最佳做法是什么?
- laravel - Why lumen is not decoding cookies from laravel session correctly.
- java - 使用 Lucene 7.4.0 打印索引词
- android - Android数据绑定在打开其他应用后停止工作
- networking - 域控制器名称中可以使用句点(。)吗?
- c++ - 未使用 STL 向量分配被释放的指针(仅限 OS X)