我试图从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
知道为什么会这样吗?
1条答案
按热度按时间hl0ma9xz1#
这与设计相符。
参数化查询提供的机制旨在向查询传递文本值,而不是诸如列名之类的元信息。
需要记住的一点是,数据库必须能够在没有参数的情况下解析参数化查询字符串:显然,在这种假设下,列名不能用作参数。
对于您的用例,唯一可能的解决方案是将列名连接到查询字符串中,如第二个示例所示。如果参数来自代码外部,请确保在此之前正确验证它(例如,通过对照固定的值列表进行检查)。