Python sqlite3.OPERATIONALROR:没有这样的列-但我';I’我不是要专栏吗?

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

因此,我尝试使用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 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)