Python将字典插入sqlite3
Posted
技术标签:
【中文标题】Python将字典插入sqlite3【英文标题】:Python insert Dict into sqlite3 【发布时间】:2022-01-21 16:33:10 【问题描述】:我有一个 sqlite3 数据库,其中第一列是 id
并设置为具有自动增量的主键。我正在尝试从我的 python 字典中插入值:
value = 'host': [], 'drive': [], 'percent': []
soup = bs(contents, 'html.parser')
for name in soup.find_all("td", class_="qqp0_c0"):
hostname = name.parent.find('td').get_text()
drive = name.parent.find('td', class_="qqp0_c1").get_text()
used_percent = name.parent.find('td', class_="qqp0_c5").get_text()
value['host'].append(hostname)
value['drive'].append(drive)
value['percent'].append(used_percent)
#cur.executemany("INSERT INTO scrap VALUES (?, ?, ?)", hostname, drive, used_percent)
cur.execute("INSERT INTO scrap VALUES (?, ?, ?);", value)
我不断收到错误,我最近的错误似乎暗示它需要一个id
值:
cur.execute("INSERT INTO scrap VALUES (?, ?, ?);", value) sqlite3.OperationalError: table scrap 有 4 列,但提供了 3 个值
我需要提供id
号码吗?
这是数据库架构:
CREATE TABLE scrap (
id INTEGER PRIMARY KEY AUTOINCREMENT,
hostname VARCHAR(255),
drive VARCHAR(255),
perc VARCHAR(255)
);
【问题讨论】:
什么是CREATE
语句,用于创建您尝试将INSERT
放入的表?如果传递 4 个值会发生什么?如果该列正确设置为自动增量,您应该可以只传递 3 个值。
不知道该怎么做
【参考方案1】:
如果id
列是自动递增的,您不需要为其提供值,但您需要“告诉”数据库您没有插入它。请注意,为了绑定字典,您需要按名称指定占位符:
cur.execute("INSERT INTO scrap (hostname, drive, perc) VALUES (:host, :drive, :percent);", value)
编辑:
跟进 cmets 的讨论 - value
字典应将占位符名称映射到它们的预期值,而不是包含它们的列表:
soup = bs(contents, 'html.parser')
for name in soup.find_all("td", class_="qqp0_c0"):
hostname = name.parent.find('td').get_text()
drive = name.parent.find('td', class_="qqp0_c1").get_text()
used_percent = name.parent.find('td', class_="qqp0_c5").get_text()
value = 'host': hostname, 'drive': drive, 'percent': used_percent
cur.execute("INSERT INTO scrap (hostname, drive, perc) VALUES (:host, :drive, :percent);", value)
【讨论】:
这是这样运行它的错误输出: cur.execute("INSERT INTO scrap (hostname, drive, perc) VALUES (?, ?, ?);", value) sqlite3.ProgrammingError : 绑定 1 没有名称,但您提供了一个字典(只有名称)。 这是我的数据库架构:CREATE TABLE scrap (id INTEGER PRIMARY KEY AUTOINCREMENT, hostname VARCHAR(255), drive VARCHAR(255), perc VARCHAR(255)); @codereber 我错过了修复占位符名称。请参阅我编辑的答案。 这是修复占位符名称后的错误:cur.execute("INSERT INTO scrap (hostname, drive, perc) VALUES (:hostname, :drive, :used_percent);", value) sqlite3 .ProgrammingError:您没有为绑定 1 提供值。 @codereber 抱歉,您字典中的关键字是“percent”,而不是“used_percent”——我的错。再次编辑和修复。以上是关于Python将字典插入sqlite3的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 将字典值插入到 html 模板文件中?
如何使用 Python 将嵌套字典/json 插入 MySQL 表
如何使用 executemany 将 Python 中的字典列表插入 MySQL