今天要讓資料庫真的存放作品,而不是只有空表格。
步驟 1:建立 seed.py
這個檔案負責放入一開始的示範資料,方便後續開發與測試。
from database import get_db_connection, init_dbinit_db()sample_media = [ ( "星際效應", "movie", 2014, "科幻", "watched", 9, "很喜歡電影對時間與親情的描寫。" ), ( "全面啟動", "movie", 2010, "科幻", "want_to_watch", None, "" ), ( "Hades", "game", 2020, "動作", "playing", 8, "戰鬥節奏很流暢。" )]connection = get_db_connection()connection.executemany(""" INSERT INTO media ( title, media_type, year, genre, status, rating, notes ) VALUES (?, ?, ?, ?, ?, ?, ?)""", sample_media)connection.commit()connection.close()print("示範資料已新增。")
步驟 2:執行示範資料程式
python seed.py
預期輸出:
示範資料已新增。
注意: 這個示範檔每執行一次都會新增三筆資料。如果重複執行,資料庫就會出現重複作品。現在只需執行一次;後面正式網站的新增功能會取代這個方法。
步驟 3:理解 INSERT 與 executemany
這段 SQL:
INSERT INTO media (
title, media_type, year
)
VALUES (?, ?, ?)
代表要新增一筆作品。
問號 ? 是 SQL 參數的佔位符,真正的資料由 Python 傳入。這種寫法比把使用者輸入直接拼接成 SQL 字串安全。
executemany() 則能使用同一份 SQL 指令,依序新增多筆資料。
步驟 4:查詢資料是否成功
建立 check_data.py:
from database import get_db_connectionconnection = get_db_connection()rows = connection.execute(""" SELECT id, title, media_type, year, rating FROM media ORDER BY id""").fetchall()for row in rows: print( row["id"], row["title"], row["media_type"], row["year"], row["rating"] )connection.close()
執行:
python check_data.py
你應該會看到三筆作品的資訊。