pyodbc - 如何使用参数的变量执行select语句

时间:2012-03-01 14:40:41

标签: python sql variables select pyodbc

我正在尝试遍历名为Throughput的表中的所有行,但是对于特定的DeviceName(我已经存储在data ['DeviceName']中。我尝试了以下内容,但它不起作用:

for row in cursor.execute("select * from Throughput where DeviceName=%s"), %(data['DeviceName']):

编辑:也尝试了这个,但它不起作用:

for row in cursor.execute("select * from Throughput where(DeviceName), values(?)", (data['DeviceName']) ):

EDIT2:我最终工作代码的片段:

query = "select * from Throughput where DeviceName = '%s'" % data['Device Name']
      try:
          for row in cursor.execute(query):

3 个答案:

答案 0 :(得分:40)

您还可以parameterize声明:

...
cursor.execute("select * from Throughput where DeviceName = ?", data['DeviceName'])
...

这是一种更好的方法,原因如下:

  • 防止SQL注入(无论是否使用参数化或动态SQL,都应始终验证用户输入)
  • 您不必担心使用单引号转义where子句的位置,因为参数会单独传递给数据库
  • SQL准备一次,后续执行的查询使用预准备语句而不是重新编译

答案 1 :(得分:0)

我不知道我的问题是否与你的相似,但我的问题是因为我写了一个类似的查询 WHERE date > ?" "OR date NOT LIKE '9%' 我忘记在第一行的末尾或第二行的末尾放置一个简单的空格 (' ')。最后我通过这样做解决了它。最终代码如下:

WHERE date > ? "
            "OR date NOT LIKE '9%'

注意:注意第一行末尾的最后一个' '。

答案 2 :(得分:-15)

在不知道列DeviceName的类型和数据库服务器的情况下,我会引用用于约束DeviceName的字符串

"select * from Throughput where DeviceName='%s'" % data['DeviceName']

看看会发生什么。