我正在嘗試將兩個資料庫合并為一個,兩個資料庫都包含相同的方案,但資訊是唯一的。我已經撰寫了一個代碼來將它們合并在一起,但是我得到一個錯誤,這取決于我是否包含“id”(兩個表中的主鍵)。我已經讀過,在將表合并在一起時,我應該只維護其中一個表中的主鍵,并將其作為自動增量來設定下一個表中的主鍵。完成此操作后,我收到一條錯誤訊息,提示我提供的值比表所需的少一列,但是當我包含“id”時,我收到唯一 id 的錯誤(因為兩個程式中的主鍵都是準確的相同的)。如果有人能告訴我為什么我的主鍵沒有為此增加,我將不勝感激。如果我描述的東西不好或沒有
#被匯入的表的表結構
def build_case_study_1_table():
with sqlite3.connect('albums1.db') as db:
db.execute(
"CREATE TABLE IF NOT EXISTS albums(" \
"id INTEGER PRIMARY KEY NOT NULL," \
"nr INTEGER NOT NULL," \
"band TEXT NOT NULL," \
"song TEXT NOT NULL," \
"album TEXT NOT NULL," \
"duration TEXT NOT NULL);")
#表被合并到,我的主表
conn = sqlite3.connect('albums.db')
c = conn.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS albums (
id INTEGER PRIMARY KEY NOT NULL,
nr INTERGER NOT NULL,
band TEXT NOT NULL,
song TEXT NOT NULL,
album TEXT NOT NULL,
duration TEXT NOT NULL
)""")
#合并兩者的代碼
def merge_databases():
db_main = sqlite3.connect('albums.db')
db_import = sqlite3.connect('albums1.db')
import_cursor = db_import.cursor()
import_cursor.execute('SELECT * FROM albums')
output = import_cursor.fetchall()
sql = "INSERT INTO albums (nr, band, song, album, duration) VALUES (:nr, :band, :song, :album, :duration)"
main_cursor = db_main.cursor()
for row in output:
main_cursor.execute(sql, row)
db_main.commit()
import_cursor.close()
main_cursor.close()
uj5u.com熱心網友回復:
您可以傳遞which 將對列:id null進行評估,并且它將獲得適當的值,因為它被定義為:nullidINTEGER PRIMARY KEY
sql = "INSERT INTO albums VALUES (:id null, :nr, :band, :song, :album, :duration)"
main_cursor = db_main.cursor()
for row in output:
main_cursor.execute(sql, row)
或者,executemany()為了避免for回圈:
sql = "INSERT INTO albums VALUES (:id null, :nr, :band, :song, :album, :duration)"
main_cursor = db_main.cursor()
main_cursor.executemany(sql, output)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/441428.html
標籤:Python 数据库 sqlite 合并 sql-插入
上一篇:如何根據條件增加列的值?
