你可以扩展 SQLAlchemy 查询类并在同一个会话中使用不同的类吗?

Posted

技术标签:

【中文标题】你可以扩展 SQLAlchemy 查询类并在同一个会话中使用不同的类吗?【英文标题】:Can you extend SQLAlchemy Query class and use different ones in the same session? 【发布时间】:2016-07-28 09:01:12 【问题描述】:

我正在使用 SQL Alchemy ORM 并且有一些类/表,每个类/表都可能有一些自定义查询。假设,我想在表Fruit 中添加名为with_seed 的过滤方法,只给我带种子的水果,并在表Cutlery 中添加过滤方法is_sharp,只给我锋利的餐具。我想将这些过滤器定义为Query 对象的扩展,并且我想在同一个事务中使用它们:

def delete_sharp_cutlery_and_seedy_fruits(session_factory):
  session = session_factory()
  session.query(Fruit).with_seed().delete(synchronize_session='fetch')
  session.query(Cutlery).is_sharp().delete(synchronize_session='fetch')
  session.commit()

这可能吗?


这与问题here有关。但是那里的解决方案需要为不同的查询类创建不同的会话。

【问题讨论】:

【参考方案1】:

您可以将会话传递给查询构造函数

CustomQuery(entities=[Fruit], session=session).with_seed().delete(synchronize_session='fetch')

【讨论】:

以上是关于你可以扩展 SQLAlchemy 查询类并在同一个会话中使用不同的类吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在静态库中扩展 NSString 类并在带有 Swift 的 App 中使用它吗?

Flink Gelly 扩展边缘类并在 DataSet 中使用

SQLAlchemy ORM:修改查询返回的列

python sqlalchemy 查询条件怎么写

用 sqlalchemy 查询敲除填充表

sqlalchemy 动态查询条件怎么写