【问题标题】:SQLAlchemy ORM before-insert hookSQLAlchemy ORM 插入前钩子
【发布时间】: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 文档,但我不知道如何使用它们来实现这一点。

【问题讨论】:

标签: orm sqlalchemy


【解决方案1】:

看起来你想要ORM Events:

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 = ...

【讨论】:

  • 这里的mapper和connect指的是什么?
  • @ArsalanAhmadIshaq 映射器 – 作为此事件目标的映射器。 connection – 用于为此实例发出 INSERT 语句的 Connection。这为特定于该实例的目标数据库上的当前事务提供了句柄。
猜你喜欢
  • 2011-04-09
  • 2021-06-25
  • 2019-11-21
  • 2019-05-16
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
相关资源
最近更新 更多