Python SQLAlchemy 0.6.5(和0.6.8)SessionExtension在';有人打电话给他

Python SQLAlchemy 0.6.5(和0.6.8)SessionExtension在';有人打电话给他,python,sqlalchemy,Python,Sqlalchemy,我不明白,但这段代码不会调用after\u flush/before\u flush/after\u flush\u postexc # -*- coding: utf-8 -*- from sqlalchemy.orm import scoped_session, sessionmaker from sqlalchemy.orm.interfaces import SessionExtension class AfterFlushExtension(SessionExtension):

我不明白,但这段代码不会调用after\u flush/before\u flush/after\u flush\u postexc

# -*- coding: utf-8 -*-

from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.orm.interfaces import SessionExtension

class AfterFlushExtension(SessionExtension):
    def before_commit(self, session):
        print "> before_commit"

    def after_commit(self, session):
        print "> after_commit"

    def before_flush(self, session, flush_context, instances):
        print '> before_flush'

    def after_flush(self, session, flush_context):
        print '> after_flush'

    def after_flush_postexec(self, session, flush_context):
        print '> after_flush_postexec'

session = scoped_session(sessionmaker(extension=AfterFlushExtension()))
session.flush()
session.commit()
结果是:

$ python ~/Dropbox/playground/python/sqlalchemy_hook_test/main.py 
> before_commit
> after_commit

迈克尔·拜耳在SQLAlchemy的邮件列表中回答:

刷新事件仅在以下情况下触发: 事实上,有些东西是值得去做的 脸红了。这对我来说是低效的 要为每个事件发出的事件 flush()因为flush实际上被称为 很多次,在每次查询中, 假设已启用自动刷新。为此 使用以下会话推理flush() 没有任何类型的变化事件 快速检查一些标志并返回

在你真正成为 打电话 在\u刷新\u之前\u挂起的\u更改()如果 这很有帮助

我会检查文档字符串,看看是否 需要任何澄清


谢谢,Michael

Michael Bayer在SQLAlchemy的邮件列表上回答:

刷新事件仅在以下情况下触发: 事实上,有些东西是值得去做的 脸红了。这对我来说是低效的 要为每个事件发出的事件 flush()因为flush实际上被称为 很多次,在每次查询中, 假设已启用自动刷新。为此 使用以下会话推理flush() 没有任何类型的变化事件 快速检查一些标志并返回

在你真正成为 打电话 在\u刷新\u之前\u挂起的\u更改()如果 这很有帮助

我会检查文档字符串,看看是否 需要任何澄清


谢谢你,Michael,你有没有试过在有东西等着冲洗的地方用这个?如果同花顺中无事可做,同花顺会做什么?让我们知道!你有没有试过在有东西等着冲洗的地方?如果同花顺中无事可做,同花顺会做什么?让我们知道!