gpt4 book ai didi

python - sqlite3.操作错误: no such column - but I'm not asking for a column?

转载 作者:IT王子 更新时间:2023-10-29 06:31:33 27 4
gpt4 key购买 nike

所以,我正在尝试使用 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 注入(inject),在某些情况下它们甚至可以加快您的查询速度,您将不再需要担心那些单引号引起的问题,因为 DB 库会为您处理这些问题。

假设我们有上面的查询,我们的值 A01 存储在变量 value 中。

你可以这样写:

 var = cursor.execute("SELECT Cost FROM Items WHERE ID = '{}'".format( value ))

作为准备语句,它看起来像这样:

var = cursor.execute("SELECT Cost FROM Items WHERE ID = ?", (value,))

请注意,cursor.execute() 方法接受第二个参数,该参数必须是一个序列(可以是元组或列表)。由于我们只有一个值,您可能会错过 (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)

关于python - sqlite3.操作错误: no such column - but I'm not asking for a column?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com