SQLAlchemy ORM 插入前钩子

The*_*uhn 7 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 example:"""
        if self.value is None:
            self.value = session.query(func.avg(Table.value))\
                    .filter(Table.value > 100).scalar()
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关 ORM 事件等的 SQLAlchemy 文档,但我不知道如何使用它们来实现这一点。

Ken*_*der 7

看起来你想要ORM 事件

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 = ...
Run Code Online (Sandbox Code Playgroud)

  • 这里的mapper和connect指的是什么? (3认同)