使用问号的sqlite3参数化查询
我正在用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