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



我正在尝试从python脚本对SQLite数据库进行查询。但是,每当我使用参数化时,它只返回第一个参数,即column2。期望的结果是让它返回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

知道为什么会这样吗?

这按照设计运行。

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

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

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

最新更新