我有一個 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:表廢料有 4 列,但提供了 3 個值
我需要提供一個id號碼嗎?
這是資料庫架構:
CREATE TABLE scrap (
id INTEGER PRIMARY KEY AUTOINCREMENT,
hostname VARCHAR(255),
drive VARCHAR(255),
perc VARCHAR(255)
);
uj5u.com熱心網友回復:
如果該id列是自動遞增的,則不需要為其提供值,但確實需要“告訴”資料庫您沒有插入它。請注意,為了系結字典,您需要按名稱指定占位符:
cur.execute("INSERT INTO scrap (hostname, drive, perc) VALUES (:host, :drive, :percent);", value)
編輯:
跟進評論中的討論 -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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/388121.html
