Orm SQLAlchemy在插入挂钩之前

Orm SQLAlchemy在插入挂钩之前,orm,sqlalchemy,Orm,Sqlalchemy,在从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 exampl

在从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()
我一直在阅读SQLAlchemy文档中关于ORM事件之类的内容,但我不知道如何使用它们来实现这一点。

看起来您想要:


也许这可以帮助您:如果您使用的是PostgreSQL,理论上,这可以使用CTE(使用AS…INSERT…)实现。但通过SQLAlchemy似乎还不可能做到这一点,请参阅公开问题。mapper和connect在这里指的是什么?
from sqlalchemy import event

class Table(Base):
    ...

@event.listens_for(Table, 'before_insert')
def do_stuff(mapper, connect, target):
    # target is an instance of Table
    target.value = ...