pyodbc returns 中的清理查询仅字段名称

Sanitized queries in pyodbc returns only the field name

当我使用 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]', )

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

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

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

这将 return 我所期望的。

我在这里错过了什么?

你可以这样使用,

import pyodbc

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

正如 Serg 在评论中的回答:

列名不能是构造的 query/statement 中的可变参数。只有 values 可以作为参数。