提问人:Shane Bishop 提问时间:11/5/2023 最后编辑:Shane Bishop 更新时间:11/9/2023 访问量:40
sqlite3 错误“ValueError:参数类型不受支持”
sqlite3 error "ValueError: parameters are of unsupported type"
问:
我有一个像这样创建的 sqlite3 表:
CREATE TABLE packages (
id INTEGER PRIMARY KEY,
name TEXT UNIQUE NOT NULL,
description TEXT,
price DECIMAL(5,2),
enabled INTEGER DEFAULT 1
);
我正在尝试查询该表,如下所示:
import sqlite3
from flask import current_app, g
def connection():
if 'db' not in g or not isinstance(g.db, sqlite3.Connection):
g.db = sqlite3.connect(current_app.config.get('DBPATH'),
detect_types=sqlite3.PARSE_DECLTYPES)
g.db.row_factory = sqlite3.Row
return g.db
packageid = 6
cur = connection().cursor()
cur.execute("""
SELECT id
FROM packages
WHERE id = :packageid
""", {'packageid', packageid})
rec = cur.fetchone()
# Omitted logic to handle rec being None or not None
当我运行上面的代码时,它失败了,第 16 行。ValueError: parameters are of unsupported type
为什么会出现此错误? 是 sqlite3 中的一个,并且是 python 中的一个。我不明白为什么这两种类型不兼容。id
INTEGER
packageid
int
答:
2赞
Ralubrusto
11/5/2023
#1
我想问题不在于你的变量的类型。如果你看一下该方法的文档(可在此处获得),你会看到它需要字典或序列作为第二个参数。Cursor.execute
在您的代码中,第二个参数实际上是一个(可能是一个错别字,相信我)。只需将其从 更改为 ,它可能会起作用。set
{'packageid', packageid}
{'packageid': packageid}
评论
{'packageid', packageid}
你可能想这是一个字典,但它实际上是一个集合,因为你用了逗号而不是冒号。dict
、、您运行的是python <3.12吗?我得到了list
tuple
generator
set
sqlite3.ProgrammingError: parameters are of unsupported type