Can';t将python列表数据插入数据库

Can';t将python列表数据插入数据库,python,sqlite,Python,Sqlite,我有一个python列表类型的数据 country = ['a', 'a', 'a', 'b', 'b', 'c'] 我想将此列表插入到数据库表中-在这样的行中 country = [('a', 3), ('b', 2), ('c', 1)] 因此,我编写了代码: import sqlite3 from collections import Counter db = "test.db" conn = sqlite3.connect(db) c = conn.cursor() c.ex

我有一个python列表类型的数据

country = ['a', 'a', 'a', 'b', 'b', 'c']
我想将此列表插入到数据库表中-在这样的行中

country =  [('a', 3), ('b', 2), ('c', 1)]
因此,我编写了代码:

import sqlite3
from collections import Counter

db = "test.db"

conn = sqlite3.connect(db)
c = conn.cursor()

c.execute("CREATE TABLE country_data (country TEXT)")

country = ['a', 'a', 'a', 'b', 'b', 'c']

c.execute("INSERT INTO country_data VALUES(?)", (str(list(Counter(country).items()))))

conn.commit()
但它给了我错误

Traceback (most recent call last):
File "try.py", line 19, in <module>
c.execute("INSERT INTO country_data VALUES(?)", (str(list(Counter(country).items()))))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 30 supplied.
回溯(最近一次呼叫最后一次):
文件“try.py”,第19行,在
c、 执行(“插入国家/地区数据值(?),(str(列表(计数器(国家/地区).items())))
sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,提供了30个。

如何解决这个问题呢?

(str(list(Counter(country.items())))
不是元组,它只是
str(list(Counter(country.items()))
。您需要一个元组,其中一个元素由尾随逗号指定:
(str(list(Counter(country).items()),)

首先,您需要一个可以存储数字的表:

c.execute("CREATE TABLE country_data(country TEXT, cnt int)")
接下来,您只需要一个元组列表:

data = list(Counter(country).items())
然后,您可以使用ExecuteMy将数据插入表中:

c.executemany("INSERT INTO country_data(country, cnt) VALUES(?,?)", data)
注二?在INSERT中-每个值一个


好的,我已经看过你的评论了。事实证明,您只需要在文本列中放入一个字符串。 你掉进了一个小陷阱。碰巧你的字符串被解压成30个字母。将其包装成显式元组。可能是这样的:

data = str(list(Counter(country).items()))
c.execute("INSERT INTO country_data(country) VALUES(?)", (data,))

好吧,我至少可以告诉你错误的来源。该表达式返回的字符串长度为30。所以我猜它不希望出现这样的字符串。不幸的是,我对sqlite3库了解不够,无法告诉您它需要什么。如果我删除str()并只写
list(Counter(country).items())
错误是:
sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用1,提供了3个。
您的表正好由一列组成。您希望如何在单个列中存储
('a',3)
?或者你是说你想要三行
a
,两行
b
和一行
c
ᵩ 不,我想将这个完整的国家/地区列表存储到上面这样的列中。是否可能?我试过这样做,但它给了我同样的错误:(@Fahim我想你被括号搞混了。试一下
country\u string=str(list(Counter(Counter).items());c.execute(“插入到country\u数据值(?),(country\u string,)