我試圖將兩個數據庫合并為一個數據庫,兩個數據庫都包含相同的方案,但信息是唯一的。我已經編寫了一段代碼來將它們合并在一起,但根據是否包含“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()
您可以傳遞
:id + null
,它將為id
列的:id + null
求值為null
,它將獲得適當的值,因為它被定義為INTEGER PRIMARY KEY
:或者,使用
executemany()
來避免for
循環: