一对多和一对一关系基本相似,去掉 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
第一篇文章
第二篇文章
第三篇文章