【问题标题】:Passing parameters from Python to SQL Server将参数从 Python 传递到 SQL Server
【发布时间】:2021-01-11 06:45:33
【问题描述】:

我有这样的代码:

conn = pyodbc.connect(<Connection Details>)
c = conn.cursor()

employee_id=(100,101)
query = "select * from employees where employeeid in ?"

c.execute(query,employee_id)

我收到此错误:

'SQL 包含 1 个参数标记,但提供了 2 个参数', 'HY000'

有没有办法传递这个参数?我不想通过串联创建动态数组。

在多个where条件的情况下,有没有办法在查询中命名参数标记?

【问题讨论】:

  • 每个 ? 与 1 个参数相关。您已经传递了 2 个参数。你预计会发生什么?如果你想做超过 1 个查询,你应该运行类似 executemany 的东西,或者运行 executre 超过 1 次
  • 从这里检查接受的答案:stackoverflow.com/questions/4574609/…
  • @Som-1 你是对的,我误读了代码,这就是我删除评论的原因
  • @MZ.可能有多个员工 ID。所以我们无法预先确定“?”的数量

标签: python sql sql-server pyodbc


【解决方案1】:

如果我没记错的话,占位符是%s 而不是?

不管怎样,你可以使用格式化方法/字符串格式化来完成工作:

conn = pyodbc.connect(<Connection Details>)
c = conn.cursor()
employee_id=(100,101)

query = "select * from employees where employee_id in {}"
c.execute(query.format(employee_id))

【讨论】:

  • 这不是一种安全的方法。使用此代码可以进行 SQL 注入。
  • 补充@Som-1 所说的,准备好的语句存在是有原因的
  • @som-1 我知道这不是一种安全的方式。我只是想知道它是如何完成的,以防我想这样做。 :)
  • @Aditya 检查我在问题下的评论 - 有一个类似问题的链接,其中提供了类似但更安全的代码:stackoverflow.com/questions/4574609/…
猜你喜欢
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多