【发布时间】:2012-12-12 00:12:08
【问题描述】:
我试图弄清楚如何在从 ORM 插入一行之前编写一个钩子来查询数据库。我希望能达到类似的效果:
class Table(Base):
id = Column(Integer, primary_key=True)
value = Column(Integer, nullable=False)
def before_insert_hook(self, session):
"""Some arbitrary queries and code. For example:"""
if self.value is None:
self.value = session.query(func.avg(Table.value))\
.filter(Table.value > 100).scalar()
我一直在阅读有关 ORM 事件等的 SQLAlchemy 文档,但我不知道如何使用它们来实现这一点。
【问题讨论】:
-
如果您使用的是 PostgreSQL,理论上,这可以使用 CTE 来实现(WITH
AS ... INSERT ...)。但看起来这还不能通过 SQLAlchemy 实现,请参阅未解决的问题 bitbucket.org/zzzeek/sqlalchemy/issue/2551。
标签: orm sqlalchemy