【问题标题】:Parameterized Python SQLite3 query is returning the first parameter参数化 Python SQLite3 查询返回第一个参数
【发布时间】:2020-05-20 00:53:47
【问题描述】:

我正在尝试从 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

知道为什么会这样吗?

【问题讨论】:

    标签: python sql sqlite select parameterized-query


    【解决方案1】:

    这符合设计。

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 2020-03-18
      • 2015-12-12
      • 2018-01-02
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多