gpt4 book ai didi

python - Flask sqlalchemy - 仅使用实体 ID 插入多对多

转载 作者:行者123 更新时间:2023-11-30 22:38:14 25 4
gpt4 key购买 nike

假设我有 http://flask-sqlalchemy.pocoo.org/2.1/models/ 中建议的多对多关系:

tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('page_id', db.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)

我有一个完全由以下内容标识的页面:

page = Page.query.filter_by(id=value).one()

我还有标签ids列表。当前的工作代码是:

for id in tag_ids:
tag = Tag.query.filter_by(id=id).one() #wanna avoid this
page.tags.append(tag)

对于更复杂的表,这可能效率低下,因为它会进行不必要的查询来识别标记实体,只是为了满足 SQLAlchemy 架构。那么:如何仅通过提供页面 id 和标签 id 来插入标签表?

我已经尝试过,但没有成功,这个:

tags.insert().values(tag_id=value1, page_id=value2)
db.session.commit()

最佳答案

page_id = Page.query.get(value).id

for tag_id in tag_ids:
db.session.connection().execute(tags.insert.values(tag_id=tag_id, page_id=page_id))

关于python - Flask sqlalchemy - 仅使用实体 ID 插入多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43648485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com