sql参数化的PythonSQLite3查询正在返回第一个参数

zi8p0yeb  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(326)

我试图从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

知道为什么会这样吗?

hl0ma9xz

hl0ma9xz1#

这与设计相符。
参数化查询提供的机制旨在向查询传递文本值,而不是诸如列名之类的元信息。
需要记住的一点是,数据库必须能够在没有参数的情况下解析参数化查询字符串:显然,在这种假设下,列名不能用作参数。
对于您的用例,唯一可能的解决方案是将列名连接到查询字符串中,如第二个示例所示。如果参数来自代码外部,请确保在此之前正确验证它(例如,通过对照固定的值列表进行检查)。

相关问题