使用问号在sqlite3中进行参数化查询

时间:2014-04-01 04:23:29

标签: python sql sqlite parameterized-query

我正在使用带有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 个答案:

答案 0 :(得分:2)

您正在使用字符串操作混合参数化查询。首先,这是非常不安全的,其次,您已经创建了语法问题(您在查询字符串后错过了逗号)。试试这个:

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