【问题标题】:Parameterized queries in sqlite3 using question markssqlite3中使用问号的参数化查询
【发布时间】:2014-04-01 04:23:29
【问题描述】:

我正在使用带有 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])

【问题讨论】:

  • 如果相同则无需再次设置日期时间

标签: python sql sqlite parameterized-query


【解决方案1】:

您正在将参数化查询与字符串操作混合在一起。首先,这是非常不安全的,其次,您的语法存在问题(您在查询字符串后遗漏了一个逗号)。试试这个:

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

【讨论】:

  • 非常聪明!谢谢特里伯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
相关资源
最近更新 更多