多对多的关系,要通过一个中间表进行关联
中间表,不能通过calss方式实现,只能通过db.Table的方式实现
设置关联:tags=db.relationship('Tag',secondary=article_tag,backref=db.backref('articles'))需要使用一个关键字参数secondary=中间表来进行关联
访问和数据添加可以通过以下方式进行操作
article_tag=db.Table('article_tag',
db.Column('article_id',db.Integer,db.ForeignKey('article.id'),primary_key=True),
db.Column('tag_id',db.Integer,db.ForeignKey('tag.id'),primary_key=True))
class Article(db.Model):
__tablename__='article'
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
title=db.Column(db.String(100),nullable=False)
tags=db.relationship('Tag',secondary=article_tag,backref=db.backref('articles'))
class Tag(db.Model):
__tablename__='tag'
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
name=db.Column(db.String(100),nullable=False)
db.create_all()
@app.route('/')
def hello_world():
# article1=Article(title='aaa')
# article2=Article(title='bbb')
# tag1=Tag(name='111')
# tag2=Tag(name='222')
#
# article1.tags.append(tag1)
# article1.tags.append(tag2)
# article2.tags.append(tag1)
# article2.tags.append(tag2)
#
# db.session.add(article1)
# db.session.add(article2)
# db.session.add(tag1)
# db.session.add(tag2)
article1=Article.query.filter(Article.title=='aaa').first()
tags=article1.tags
for tag in tags:
print(tag.name)
db.session.commit()
return render_template('index.html')
Flask-多对多关系
最新推荐文章于 2022-07-18 10:14:09 发布