使用问号的sqlite3参数化查询

4 投票
1 回答
18571 浏览
提问于 2025-04-18 00:47

我正在用Python的sqlite3模块,写了这样的代码。目前在我的数据库里存储着每天的天气情况,现在我需要让我的代码用更新的数据替换掉一些行。代码应该是查找datetime值等于new_data[0]的那一行。

我现在参数化查询的方式是错的,但我不知道正确又优雅的做法是什么!

new_data = ['12 Mar 2014', 'sunny', 20, 12]

conn = sqlite3.connect(database_file)
c = conn.cursor()
c.execute("UPDATE weather SET datetime = ?, condition = ?, high = ?, low = ? WHERE datetime = %s" new_data, %new_data[0])

1 个回答

9

你把带参数的查询和字符串操作搞混了。首先,这样做非常不安全,其次,你的语法有问题(你在查询字符串后面漏了一个逗号)。试试这个:

new_data = ('12 Mar 2014', 'sunny', 20, 12, '12 Mar 2014',)

conn = sqlite3.connect(database_file)
c = conn.cursor()
c.execute("UPDATE weather SET datetime = ?, condition = ?, high = ?, low = ? WHERE datetime = ?", new_data)

更多细节可以在这里找到: https://docs.python.org/2/library/sqlite3.html

撰写回答