参数化 Python SQLite3 查询返回第一个参数

Parameterized Python SQLite3 query is returning the first parameter

我正在尝试从 python 脚本查询 SQLite 数据库。但是,每当我使用参数化时,它只是 return 第一个参数,即 column2。期望的结果是 return 在 column1 等于 row1 的行的 column2 中保存的值。

conn = sqlite3.connect('path/to/database')
c = conn.cursor()
c.execute('SELECT ? from table WHERE column1 = ? ;', ("column2","row1"))
result = c.fetchone()[0]
print(result)

它打印

>>column2

每当我 运行 使用连接字符串时,它都能正常工作。

conn = sqlite3.connect('path/to/database')
c = conn.cursor()
c.execute('SELECT ' + column2 + ' from table WHERE column1 = ' + row1 + ';')
result = c.fetchone()[0]
print(result)

并打印:

>>desired data

知道为什么会这样吗?

这符合设计。

参数化查询提供的机制旨在将文字值传递给查询,而不是列名等元信息。

要记住的一件事是数据库必须能够解析参数化查询字符串而无需手头的参数:显然,列名不能用作在这种假设下的参数。

对于您的用例,唯一可能的解决方案是将列名连接到查询字符串中,如第二个示例所示。如果参数来自您的代码之外,请务必在此之前对其进行正确验证(例如,根据固定的值列表对其进行检查)。