python - 使用准备好的选择语句错误地格式化查询
问题描述
(Windows 7 上的 Python 3.7.2)
当我在 Python 中查询 sqlite3 数据库时,它可以正常工作:
cursor.execute('SELECT name FROM names')
#returns [('Bob',), ('Alice',), ('Jim',), ('Sally',)]
但是,当我尝试执行准备好的语句时,会发生这种情况:
c.execute('SELECT ? FROM names', ('name',))
#returns [('name',), ('name',), ('name',), ('name',)]
我最好的猜测是发生了一些奇怪的事情,导致实际执行语句看起来像“SELECT 'name' FROM names”,而不是“SELECT name FROM names”。下面是一些更详细的代码来阐述这个问题。
import sqlite3
conn = sqlite3.connect('db.db')
# This is a database with a single table:
# CREATE TABLE 'names' (
# 'name' TEXT,
# PRIMARY KEY('name')
# );
# 'names' has four entries:
# "Bob"
# "Alice"
# "Jim"
# "Sally"
c = conn.cursor()
c.execute('SELECT name FROM names')
print(c.fetchall())
# prints: [('Bob',), ('Alice',), ('Jim',), ('Sally',)]
c.execute('SELECT ? FROM names', ('name',))
print(c.fetchall())
# prints: [('name',), ('name',), ('name',), ('name',)]
c.execute('SELECT ? FROM names', ('chicken nuggets',))
print(c.fetchall())
# prints: [('chicken nuggets',), ('chicken nuggets',), ('chicken nuggets',), ('chicken nuggets',)]
c.execute('SELECT "name" FROM names')
print(c.fetchall())
# prints: [('Bob',), ('Alice',), ('Jim',), ('Sally',)]
c.execute("SELECT 'name' FROM names")
print(c.fetchall())
# prints: [('name',), ('name',), ('name',), ('name',)]
c.execute("SELECT ? FROM names", ("name",))
print(c.fetchall())
# prints: [('name',), ('name',), ('name',), ('name',)]
conn.close()
我应该如何解决这个问题?
解决方案
推荐阅读
- google-play - 封闭测试和内部测试轨道是否支持自动更新?
- c# - 使用经验规则估计有多少值低于特定偏差
- validation - 如何允许零(0)值
- mysql - SQL PHP中的JOIN表无法正常工作
- azure - 使用标准 java 应用程序进行 SAML 身份验证
- c - C 编码:我是否从节点错误地打印此数组?
- bind - Bind9:CNAME 整个 DNS 流量
- python - 如何将我的 Mask Rcnn 数据注释转换为 Yoloact++ 注释
- ruby-on-rails-3 - TypeError 没有将 Spree::Order 隐式转换为 Hash
- sql - 如何找到阻止另一个查询的查询?