iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Software Development

從開始到放棄的Flask系列 第 15

[Day 15] Flask SQLAlchemy (3) 一對多關聯

  • 分享至 

  • xImage
  •  

當我們在開發一個應用時,通常會需要處理多個資料表之間的關聯。Flask SQLAlchemy 提供了強大的方法可以來處理這些關聯,讓我們可以有效地組織和檢索相關資料。今天我會介紹資料庫一堆多關聯的方式。

什麼是一對多關聯

一對多(One-to-Many)關聯是資料庫中常見的一種關聯型態,它表示一個主要資料表(稱為「一」)中的一筆資料可以關聯到多個子資料表(稱為「多」)中的記錄。在Flask SQLAlchemy中,一對多關聯通常用於表示父子關係,其中一個主要物件(例如一位作者)可以有多個相關聯的子物件(例如多本書)。

一對多關聯

假設我們現在正在開發一個資料庫,有文章(Post)作者(Author)兩個資料表,每位作者可以有多篇文章。這是一個一對多的關聯。

  • 定義資料模型
    首先我們先定義資料模型
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    posts = db.relationship('Post', backref='author', lazy=True)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200))
    content = db.Column(db.Text)
    author_id = db.Column(db.Integer, db.ForeignKey('author.id'), nullable=False)

首先我們在Author資料模型有一個名為posts的關聯,它通過backref參數建立一個反向關聯,這樣可以輕鬆地從Post找到相關的作者。
backref是 Flask SQLAlchemy 中的一個很重要的參數,用於簡化關聯資料表之間的查詢。backref允許我們在一個資料模型中建立一個反向關聯,讓我們可以輕鬆地從關聯對象中找到相關的父對象。

創建和關聯資料

# 創建一位作者
author = Author(name='J.K. Rowling')

# 創建一本書,同時設置它的作者
book = Book(title='Harry Potter and the Sorcerer\'s Stone', author=author)

# 保存到資料庫
db.session.add(author)
db.session.add(book)
db.session.commit()

當創建一個新的子對象(例如一本書)時,可以直接設置反向關聯的屬性(例如 author),Flask SQLAlchemy 將自動處理它。

查詢和關聯資料

author = Author.query.filter_by(name='J.K. Rowling').first()
books = author.books  # 這會返回一個包含該作者所有書籍的列表

今天我只介紹了一對多關聯的一些基本用法,Flask SQLAlchemy還支援其他關聯型態,例如多對多或是一對一,可以根據開發的需求來做最適合的型態,明天我會介紹多對多的關聯型態。


上一篇
[Day 14] Flask SQLAlchemy (2) 資料庫的基本操作
下一篇
[Day 16] Flask SQLAlchemy (4) 多對多關聯
系列文
從開始到放棄的Flask30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言