sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 4 个

Posted

技术标签:

【中文标题】sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 4 个【英文标题】:sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 4 supplied 【发布时间】:2020-10-15 17:11:13 【问题描述】:
def get_stock(item_url):
    source_code = requests.get(item_url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text, features="html.parser")

    for link in soup.findAll('a','class':'none'):
        words=link.string
        stock_num=words[1:5]


        if stock_num.isdigit():
            href='https://tw.stock.yahoo.com/q/q?s='+ stock_num
            print(stock_num)
            c.execute('insert into stocks(stocknum) values (?)',stock_num)
            conn.commit()

我正在尝试将四位字符串 stock_num 插入我的 SQLite。 但是,它显示

下面是我创建表格的代码

CREATE TABLE "stocks" (
    "stocknum"  TEXT NOT NULL,
    PRIMARY KEY("stocknum")
);

我不知道如何调整我的桌子或爬虫。 我已经做了好几个小时了,我不知道发生了什么。

【问题讨论】:

【参考方案1】:

您需要在元组中传递参数——如果只有一个,则为 1 元组,但仍然是元组。

错误消息源于字符串 stock_num 恰好有 4 位数字,因此 sqlite 包装器解析例如"1337""1""3""3""7"

要解决这个问题,

c.execute('insert into stocks(stocknum) values (?)', stock_num)

应该是

c.execute('insert into stocks(stocknum) values (?)', (stock_num,))

【讨论】:

以上是关于sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 4 个的主要内容,如果未能解决你的问题,请参考以下文章

Python 3 SQLite3 - 绑定数量不正确

Python Sqlite3 executemany 中的绑定数量不正确

在数据库Python中插入列表列表