Python sqlite3.OPERATIONALROR:没有这样的列-但我';I’我不是要专栏吗?
因此,我尝试使用sqlite3,当我运行SELECT查询时似乎出现了问题,我对它不太熟悉,所以我想知道问题出在哪里:Python sqlite3.OPERATIONALROR:没有这样的列-但我';I’我不是要专栏吗?,python,sqlite,Python,Sqlite,因此,我尝试使用sqlite3,当我运行SELECT查询时似乎出现了问题,我对它不太熟悉,所以我想知道问题出在哪里: def show_items(): var = cursor.execute("SELECT Cost FROM Items WHERE ID = A01") for row in cursor.fetchall(): print(row) 当我运行这个(希望在ID=A01的情况下询问成本值)时,我得到了错误: sqlite3.OperationalError: no
def show_items():
var = cursor.execute("SELECT Cost FROM Items WHERE ID = A01")
for row in cursor.fetchall():
print(row)
当我运行这个(希望在ID=A01的情况下询问成本值)时,我得到了错误:
sqlite3.OperationalError: no such column: A01
虽然我没有要求它查看列A01,但我要求它查看列“成本”?如果要在列中查找字符串值,必须将其包装在
'
中,否则它将被解释为列名:
var = cursor.execute("SELECT Cost FROM Items WHERE ID = 'A01'")
更新2021-02-10: 由于这个问答获得了如此多的关注,我认为值得编辑,让读者了解准备好的陈述 它们不仅可以帮助您避免SQL注入,在某些情况下甚至可以加快您的查询速度,而且您将不再需要担心stings周围的单引号,因为DB库将为您处理这些单引号 假设我们有上面的查询,我们的值
A01
存储在变量value
中
你可以写:
var = cursor.execute("SELECT Cost FROM Items WHERE ID = '{}'".format( value ))
作为一份声明,它将如下所示:
var = cursor.execute("SELECT Cost FROM Items WHERE ID = ?", (value,))
var = cursor.execute("SELECT Cost FROM Items WHERE ID = ?", [value])
请注意,cursor.execute()
方法接受第二个参数,该参数必须是序列(可以是元组或列表)。由于我们只有一个值,您可能会错过(value,)
中的,
,这将有效地将单个值转换为元组
如果要使用列表而不是元组,则查询如下所示:
var = cursor.execute("SELECT Cost FROM Items WHERE ID = ?", (value,))
var = cursor.execute("SELECT Cost FROM Items WHERE ID = ?", [value])
使用多个值时,只需确保序列中的?
数字与值的数量匹配即可:
cursor.execute("SELECT * FROM students WHERE ID=? AND name=? AND age=?", (123, "Steve", 17))
还可以使用命名样式参数,其中使用字典作为参数,而不是元组或列表:
d = { "name": "Steve", "age": 17, "id": 123 }
cursor.execute("SELECT * FROM students WHERE ID = :id AND name = :name AND age = :age", d)