首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pyodbc -如何使用参数的变量执行select语句

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

Stack Overflow用户
提问于 2012-03-01 22:40:41
回答 2查看 45.1K关注 0票数 19

我试图遍历一个名为Throughput的表中的所有行,但对于特定的DeviceName (我已将其存储在数据“DeviceName”中)。我尝试过以下方法,但不起作用:

代码语言:javascript
复制
for row in cursor.execute("select * from Throughput where DeviceName=%s"), %(data['DeviceName']):

编辑:我也试过了,但不起作用:

代码语言:javascript
复制
for row in cursor.execute("select * from Throughput where(DeviceName), values(?)", (data['DeviceName']) ):

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

代码语言:javascript
复制
query = "select * from Throughput where DeviceName = '%s'" % data['Device Name']
      try:
          for row in cursor.execute(query):
EN

回答 2

Stack Overflow用户

发布于 2012-03-02 01:55:38

您还可以对语句执行parameterize操作:

代码语言:javascript
复制
...
cursor.execute("select * from Throughput where DeviceName = ?", data['DeviceName'])
...

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

  • 针对SQL注入的保护(无论使用的是参数化还是动态SQL,您都应始终验证用户输入)
  • 您不必担心用单引号转义where子句的问题因为参数是单独传递到数据库的
  • SQL只准备一次,后续执行查询时将使用预准备语句,而不是重新编译
票数 56
EN

Stack Overflow用户

发布于 2021-05-10 13:46:27

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

代码语言:javascript
复制
WHERE date > ? "
            "OR date NOT LIKE '9%'

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9518148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档