gpt4 book ai didi

python - SQLAlchemy ORM 插入相关对象而不选择它们

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:11 26 4
gpt4 key购买 nike

SQLAlchemy ORM tutorial ,大致描述了创建对象关系的过程如下。假设我有一个 Articles 表、一个 Keywords 表和一个创建多对多关系的 Articles_Keywords 表。

article = meta.Session.query(Article).filter(id=1).one()
keyword1 = meta.Session.query(Keyword).filter(id=1).one()
keyword2 = meta.Session.query(Keyword).filter(id=2).one()
article.keywords = [keyword1,keyword2]
meta.Session.commit()

我已经有了相关关键字的主键 ID 号,所以我需要做的就是将这些 ID 添加到链接到本文的 Articles_Keywords 表中。问题是,为了使用 ORM 做到这一点,我必须从数据库中选择所有关键字,这似乎无缘无故地增加了很多开销。

有没有办法在不运行任何 SQL 来选择关键字的情况下创建这种关系?

最佳答案

不幸的是,如果不查询数据库,ORM 就无法保持对象状态的完整性。但是,您可以轻松绕过 ORM 并插入到关联表中。假设 Articles_Keywords 是一个 Table 对象:

 meta.Session.execute(Articles_Keywords.delete(Articles_Keywords.c.article_id == 1))
meta.Session.execute(Articles_Keywords.insert(), [
{'article_id': 1, 'keyword_id': 1},
{'article_id': 1, 'keyword_id': 2},
])

如果您绕过 ORM,则已加载的集合不会更新以反射(reflect)数据库中的更改。如果需要刷新集合调用Session.expire就可以了。这将导致集合在下次访问时重新加载。

meta.Session.expire(article, ['keywords'])

关于python - SQLAlchemy ORM 插入相关对象而不选择它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180522/

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