Flask-SQLAlchemy学习笔记(3):一对多关系

一对多和一对一关系基本相似,去掉 uselist=False 就可以了,这里使用了作者和文章的一对多关系,一个作者可以发表多篇文章。先定义模型和关系:

class Author(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), unique=True)
    articles = db.relationship(
        'Article', back_populates='author')

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), unique=True)
    author_id = db.Column(db.Integer, db.ForeignKey('author.id'))
    author = db.relationship('Author', back_populates='articles')

back_populates,这个属性定义了一对多关系。 db.ForeignKey 绑定主键。

编写代码测试一下:

@app.cli.command()
def test_1tom():
    author = Author()
    author.name = 'J.sky'
    db.session.add(author)
    db.session.commit()

    ac1 = Article()
    ac1.title = '第一篇文章'
    ac1.author_id = author.id  # 建立关系方法1
    ac2 = Article()
    ac2.title = '第二篇文章'
    ac2.author = author  # 建立关系方法2
    ac3 = Article()
    ac3.title = '第三篇文章'
    author.articles.append(ac3)  # 建立关系方法3
    db.session.add(ac1)
    db.session.add(ac2)
    db.session.commit()

    for art in author.articles:
        print(art.title)

注意:一对多有三种添加数据和定义关系的方法

运行代码测试:

D:\test>flask dbinit
删除数据库和表
创建数据库!
数据库创建成功!
D:\test>flask test_1tom
第一篇文章
第二篇文章
第三篇文章

你可能感兴趣的:(Flask-SQLAlchemy学习笔记(3):一对多关系)