在 Python 中使用資料庫時,理解表之間的關係至關重要。您將遇到的兩種最常見的關係是一對多和多對多。讓我們透過一個 WNBA 範例來探索這些關係是什麼、它們在 SQLite 中如何運作以及如何使用 Python 實現它們。
什麼是一對多和多對多關係?
一對多
一對多關係是指一個表中的一筆記錄與另一個表中的多筆記錄相關聯。例如,在球隊和運動員的資料庫中:
- 一支球隊可以有多名運動員。
- 每位運動員只屬於一個團隊。
多對多
當一個表格中的多筆記錄與另一表中的多筆記錄關聯時,就會出現多對多關係。例如,在運動員和贊助交易的資料庫中:
- 一名運動員可以與多個品牌達成交易。
- 一個品牌可以與許多運動員達成交易。
要在 SQLite 中實現多對多關係,需要一個聯結表(也稱為橋接表或關聯表)來連結兩個主表。
使用 SQLite 在 Python 中實現關係
設定資料庫
首先,讓我們建立一個資料庫來示範這些關係。
import sqlite3
連接到 SQLite 資料庫(如果不存在則建立一個)
conn = sqlite3.connect("sports.db") cursor = conn.cursor()
建立表
cursor.execute(""" CREATE TABLE IF NOT EXISTS Team ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS Athlete ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, team_id INTEGER, FOREIGN KEY (team_id) REFERENCES Team (id) ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS Brand ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS Deal ( id INTEGER PRIMARY KEY, athlete_id INTEGER, brand_id INTEGER, FOREIGN KEY (athlete_id) REFERENCES Athlete (id), FOREIGN KEY (brand_id) REFERENCES Brand (id) ) """) conn.commit()
一對多:球隊和運動員
讓我們加入數據來展示團隊和運動員之間的一對多關係。
插入球隊和運動員
cursor.execute("INSERT INTO Team (name) VALUES (?)", ("New York Liberty",)) team_id = cursor.lastrowid cursor.execute("INSERT INTO Athlete (name, team_id) VALUES (?, ?)", ("Breanna Stewart", team_id)) cursor.execute("INSERT INTO Athlete (name, team_id) VALUES (?, ?)", ("Sabrina Ionescu", team_id)) conn.commit()
查詢隊伍中的所有運動員:
cursor.execute("SELECT name FROM Athlete WHERE team_id = ?", (team_id,)) athletes = cursor.fetchall() print("Athletes on the team:", athletes)
多對多:運動員和品牌
現在,讓我們使用 Deal 表添加數據來演示運動員和品牌之間的多對多關係。
插入品牌
cursor.execute("INSERT INTO Brand (name) VALUES (?)", ("Nike",)) brand_id_nike = cursor.lastrowid cursor.execute("INSERT INTO Brand (name) VALUES (?)", ("Adidas",)) brand_id_adidas = cursor.lastrowid
插入優惠
cursor.execute("INSERT INTO Deal (athlete_id, brand_id) VALUES (?, ?)", (1, brand_id_nike)) cursor.execute("INSERT INTO Deal (athlete_id, brand_id) VALUES (?, ?)", (1, brand_id_adidas)) cursor.execute("INSERT INTO Deal (athlete_id, brand_id) VALUES (?, ?)", (2, brand_id_nike)) conn.commit()
要查詢與運動員相關的所有品牌:
cursor.execute(""" SELECT Brand.name FROM Brand JOIN Deal ON Brand.id = Deal.brand_id WHERE Deal.athlete_id = ? """, (1,)) brands = cursor.fetchall() print("Brands for Athlete 1:", brands)
結論
透過在 SQLite 中定義與外鍵的關係並使用 Python 管理數據,您可以建立表格之間具有清晰連接的強大資料庫。理解一對多和多對多關係對於有效建立資料至關重要。
這個簡單的範例只涉及表面,但您可以擴展它以處理更複雜的關係。
以上是Python 與 SQLite 中的一對多和多對多關係的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python不是嚴格的逐行執行,而是基於解釋器的機制進行優化和條件執行。解釋器將代碼轉換為字節碼,由PVM執行,可能會預編譯常量表達式或優化循環。理解這些機制有助於優化代碼和提高效率。

可以使用多種方法在Python中連接兩個列表:1.使用 操作符,簡單但在大列表中效率低;2.使用extend方法,效率高但會修改原列表;3.使用 =操作符,兼具效率和可讀性;4.使用itertools.chain函數,內存效率高但需額外導入;5.使用列表解析,優雅但可能過於復雜。選擇方法應根據代碼上下文和需求。

有多種方法可以合併Python列表:1.使用 操作符,簡單但對大列表不內存高效;2.使用extend方法,內存高效但會修改原列表;3.使用itertools.chain,適用於大數據集;4.使用*操作符,一行代碼合併小到中型列表;5.使用numpy.concatenate,適用於大數據集和性能要求高的場景;6.使用append方法,適用於小列表但效率低。選擇方法時需考慮列表大小和應用場景。

CompiledLanguagesOffersPeedAndSecurity,而interneterpretledlanguages provideeaseafuseanDoctability.1)commiledlanguageslikec arefasterandSecureButhOnderDevevelmendeclementCyclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesandentency.2)cransportedeplatectentysenty

Python中,for循環用於遍歷可迭代對象,while循環用於條件滿足時重複執行操作。 1)for循環示例:遍歷列表並打印元素。 2)while循環示例:猜數字遊戲,直到猜對為止。掌握循環原理和優化技巧可提高代碼效率和可靠性。

要將列表連接成字符串,Python中使用join()方法是最佳選擇。 1)使用join()方法將列表元素連接成字符串,如''.join(my_list)。 2)對於包含數字的列表,先用map(str,numbers)轉換為字符串再連接。 3)可以使用生成器表達式進行複雜格式化,如','.join(f'({fruit})'forfruitinfruits)。 4)處理混合數據類型時,使用map(str,mixed_list)確保所有元素可轉換為字符串。 5)對於大型列表,使用''.join(large_li

pythonuseshybridapprace,ComminingCompilationTobyTecoDeAndInterpretation.1)codeiscompiledtoplatform-Indepententbybytecode.2)bytecodeisisterpretedbybythepbybythepythonvirtualmachine,增強效率和通用性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

禪工作室 13.0.1
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。