1. 在 Flask-SQLAlchemy
中,实现 一对多 和 一对一 还有多对多关联可以通过以下方式:
1.1 一对多关联:
假设有两个模型,Author
(作者)和 Book
(书籍),一个作者可以有多本书。
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Author(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
# 定义与 Book 模型的一对多关系
books = db.relationship('Book', backref='author')
class Book(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String)
author_id = db.Column(db.Integer, db.ForeignKey('author.id'))
在上述示例中,通过在 Author
模型中定义 books
属性,并在 Book
模型中定义 author_id
外键来建立一对多的关系。
2. 一对一关联:
假设 User
(用户)和 Profile
(用户资料)是一对一的关系。
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
# 定义与 Profile 模型的一对一关系
profile = db.relationship('Profile', uselist=False, backref='user')
class Profile(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
bio = db.Column(db.String)
在上述示例中,通过在 User
模型中设置 relationship
的 uselist=False
来表示一对一关系。
在实际使用中,通过这些关联关系,可以方便地进行查询、添加、更新和删除等操作,例如获取某个作者的所有书籍,或者获取某个用户的资料等。
3. 多对多关联:
'''<--------------> 多对多模型 <-------------->'''
tags = db.Table('tags',
db.Column('tag_id', Integer, db.ForeignKey('tag.id')),
db.Column('page_id', Integer, db.ForeignKey('page.id'))
)
class Page(db.Model):
id = db.Column(db.Integer, primary_key=True)
tags = db.relationship('Tag', secondary=tags,
backref=db.backref('pages', lazy='dynamic'))
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)