[英]Insert new column with values from a python list into an existing sql table
我的問題:我想在現有表中使用 python 列表中的值創建一個新列。 我的 SQL 表如下所示:
gender age cholesterol smoke
1 13 1 0
1 45 2 0
0 1 2 1
我在 python 列表中有值: new_data = [1,2,3]
我想在 SQL 表中創建一個新列,然后用列表中的值填充它。 所以決賽桌應該是這樣的:
gender age cholesterol smoke new_data
1 13 1 0 1
1 45 2 0 2
0 1 2 1 3
到目前為止:我嘗試創建一個新列,然后嘗試傳遞值:
import sqlite3
con = sqlite3.connect('database.db')
curs = con.cursor()
curs.execute('''ALTER TABLE demo ADD COLUMN new_date''')
con.commit()
new_data = [1,2,3]
curs.execute("INSERT INTO demo(new_date) VALUES(?)", new_data))
但它不起作用並給出此錯誤:
ProgrammingError: Incorrect number of bindings supplied.
我應該怎么辦?
這是示例數據的轉儲:
df = pd.DataFrame(data = {'gender' : [1, 1, 0],
'age' : [13, 45, 1],
'cholesterol' : [1, 2, 2],
'smoke' : [0, 0, 1]
})
您必須在添加新列且不插入新行后更新表。
而不是列表new_data = [1,2,3]
傳遞列表列表new_data = [[1, 1], [2, 2], [3, 3]]
每個列表的第二項是行號將被更新的行。
因此,如果您想使用值 100、150、250 更新列,那么new_data
應該是new_data = [[100, 1], [150, 2], [250, 3]]
。
UPDATE
語句將有一個WHERE
子句,它將檢查每次應該更新哪一行:
new_data = [[1, 1], [2, 2], [3, 3]]
sql = """
UPDATE demo AS d
SET new_data = ?
WHERE (SELECT COUNT(*) FROM demo dd WHERE dd.rowid <= d.rowid) = ?
"""
curs.executemany(sql, new_data)
con.commit()
由於您的 SQLite 版本是 3.33.0,您還可以在UPDATE
語句中使用UPDATE...FROM
語法:
sql = """
UPDATE demo AS d1
SET new_data = ?
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY rowid) rn FROM demo) AS d2
WHERE d2.rowid = d1.rowid AND rn = ?
"""
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.