首頁 > 後端開發 > Python教學 > Python 與 SQLite 中的一對多和多對多關係

Python 與 SQLite 中的一對多和多對多關係

Patricia Arquette
發布: 2024-12-30 17:08:09
原創
275 人瀏覽過

在 Python 中使用資料庫時,理解表之間的關係至關重要。您將遇到的兩種最常見的關係是一對多和多對多。讓我們透過一個 WNBA 範例來探索這些關係是什麼、它們在 SQLite 中如何運作以及如何使用 Python 實現它們。

One-to-Many and Many-to-Many Relationships in Python with SQLite

什麼是一對多和多對多關係?

一對多

一對多關係是指一個表中的一筆記錄與另一個表中的多筆記錄相關聯。例如,在球隊和運動員的資料庫中:

  • 一支球隊可以有多名運動員。
  • 每位運動員只屬於一個團隊。

多對多

當一個表格中的多筆記錄與另一表中的多筆記錄關聯時,就會出現多對多關係。例如,在運動員和贊助交易的資料庫中:

  • 一名運動員可以與多個品牌達成交易。
  • 一個品牌可以與許多運動員達成交易。

要在 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板