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

问题描述 投票:1回答:1

我正在尝试从python脚本查询SQLite数据库。但是,无论何时使用参数化,它都只会返回第一个参数,即column2。期望的结果是返回在column2等于column1的行中row1中保留的值。

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

知道为什么会这样吗?

python sql sqlite select parameterized-query
1个回答
1
投票

其行为符合设计。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.