sqlite3 错误“ValueError:参数类型不受支持”

sqlite3 error "ValueError: parameters are of unsupported type"

提问人:Shane Bishop 提问时间:11/5/2023 最后编辑:Shane Bishop 更新时间:11/9/2023 访问量:40

问:

我有一个像这样创建的 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 中的一个。我不明白为什么这两种类型不兼容。idINTEGERpackageidint

烧瓶 sqlite3-python

评论

1赞 John Gordon 11/5/2023
{'packageid', packageid}你可能想这是一个字典,但它实际上是一个集合,因为你用了逗号而不是冒号。
1赞 cards 11/5/2023
dict、、您运行的是python <3.12吗?我得到了listtuplegeneratorsetsqlite3.ProgrammingError: parameters are of unsupported type

答:

2赞 Ralubrusto 11/5/2023 #1

我想问题不在于你的变量的类型。如果你看一下该方法的文档(可在此处获得),你会看到它需要字典或序列作为第二个参数。Cursor.execute

在您的代码中,第二个参数实际上是一个(可能是一个错别字,相信我)。只需将其从 更改为 ,它可能会起作用。set{'packageid', packageid}{'packageid': packageid}