我试图弄清楚如何在从 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 文档,但我不知道如何使用它们来实现这一点。
看起来你想要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)