【问题标题】:Sanitized queries in pyodbc returns only the field namepyodbc 中的已清理查询仅返回字段名称
【发布时间】:2019-10-16 12:18:25
【问题描述】:

当我使用 pyodbc 查询我的 SQL 服务器时,我只得到我请求的字段的名称(而不是值本身)。

import pyodbc

conn = pyodbc.connect(connection_string)
cursor = conn.cursor()
cursor.execute('SELECT ? FROM [Projects]', '[ProjectNo]')
for row in cursor.fetchall():
    print(row)

这将打印以下内容:

('[ProjectNo]', )
('[ProjectNo]', )
('[ProjectNo]', )
('[ProjectNo]', )
('[ProjectNo]', )
('[ProjectNo]', )
('[ProjectNo]', )
('[ProjectNo]', )
('[ProjectNo]', )

行数等于 Projects 表中的行数。当 cursor.execute 中的第二个参数是“[ProjectNo]”、“ProjectNo”,甚至是“blahblahblahblah”时,我遇到了同样的问题;每行只给出请求字段的名称。

如果我在 cursor.execute 中只使用一个参数,我没有这个问题:

cursor.execute('SELECT [ProjectNo] FROM [Projects]')

这将返回我期望的结果。

我在这里错过了什么?

【问题讨论】:

  • 您不能为 db 对象(列、表..)使用参数。仅用于值。
  • @Serg Aha,当然。我记得以前遇到过这个问题,答案很明显。谢谢

标签: python sql pyodbc


【解决方案1】:

你可以这样使用,

import pyodbc

conn = pyodbc.connect(connection_string)
cursor = conn.cursor()
cursor.execute('SELECT {} FROM [Projects]".format('[ProjectNo]'))
for row in cursor.fetchall():
    print(row)

【讨论】:

    【解决方案2】:

    正如 Serg 在评论中回答的那样:

    列名不能是构造查询/语句中的可变参数。只有 values 可以是参数。

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多