版本:1.1.0b2 |发布日期:2016年7月1日

SQLAlchemy 1.1文档

弃用的事件接口

本节介绍SQLAlchemy 0.5中引入的基于类的核心事件接口。ORM模拟在Deprecated ORM Event Interfaces中描述。

从0.7版开始弃用:Events中描述的新事件系统取代了扩展/代理/监听器系统,为所有事件提供一个一致的接口,而不需要子类化。

执行,连接和光标事件

class sqlalchemy.interfaces。 ConnectionProxy

允许通过Connections拦截语句执行。

注意

ConnectionProxy is deprecated. 请参阅ConnectionEvents

可以执行execute()cursor_execute()中的任何一个或两个来拦截编译的语句和游标级别的执行,例如:

class MyProxy(ConnectionProxy):
    def execute(self, conn, execute, clauseelement,
                *multiparams, **params):
        print "compiled statement:", clauseelement
        return execute(clauseelement, *multiparams, **params)

    def cursor_execute(self, execute, cursor, statement,
                       parameters, context, executemany):
        print "raw statement:", statement
        return execute(cursor, statement, parameters, context)

execute参数是一个函数,它将执行操作的默认执行行为。应该使用示例中所示的签名。

代理通过proxy参数安装到Engine中:

e = create_engine('someurl://', proxy=MyProxy())
begin(conn, begin)

拦截begin()事件。

begin_twophase(conn, begin_twophase, xid)

截取begin_twophase()事件。

commit tt> conncommit

拦截commit()事件。

commit_twophase conncommit_twophasexidis_prepared t5 > ) T6> ¶ T7>

拦截commit_twophase()事件。

cursor_execute execute游标语句参数 t5 > context,executemany

拦截低级别的游标execute()事件。

execute(conn, execute, clauseelement, *multiparams, **params)

拦截高级别的execute()事件。

prepare_twophase(conn, prepare_twophase, xid)

截取prepare_twophase()事件。

release_savepoint(conn, release_savepoint, name, context)

拦截release_savepoint()事件。

回滚 conn回滚

拦截回滚()事件。

rollback_savepoint(conn, rollback_savepoint, name, context)

拦截rollback_savepoint()事件。

rollback_twophase(conn, rollback_twophase, xid, is_prepared)

拦截rollback_twophase()事件。

savepoint(conn, savepoint, name=None)

拦截保存点()事件。

连接池事件

class sqlalchemy.interfaces。 PoolListener

钩入Pool中连接的生命周期。

注意

PoolListener is deprecated. 请参阅PoolEvents

用法:

class MyListener(PoolListener):
    def connect(self, dbapi_con, con_record):
        '''perform connect operations'''
    # etc.

# create a new pool with a listener
p = QueuePool(..., listeners=[MyListener()])

# add a listener after the fact
p.add_listener(MyListener())

# usage with create_engine()
e = create_engine("url://", listeners=[MyListener()])

所有标准连接Pool类型都可以接受关键连接生命周期事件的事件侦听器:创建,池检出和检入。连接关闭时不会触发事件。

对于任何给定的DB-API连接,将会有一个connect事件,n 数量的checkout t5>或n-1 checkin事件。(如果通过detach()方法将Connection从其池中分离出来,则不会再次检入)。

这些是低级对象的低级事件:原始Python DB-API连接,没有SQLAlchemy Connection包装,Dialect服务或ClauseElement如果通过连接执行SQL,则建议显式关闭所有游标和其他资源。

事件还会收到一个_ConnectionRecord,这是一个长期存在的内部Pool对象,它基本上代表连接池中的一个“插槽”。_ConnectionRecord objects have one public attribute of note: info, a dictionary whose contents are scoped to the lifetime of the DB-API connection managed by the record. 不过,您可以使用此共享存储区域。

没有必要继承PoolListener来处理事件。任何实现一个或多个这些方法的类都可以用作池监听器。Pool将检查侦听器对象提供的方法,并根据侦听器的能力将侦听器添加到一个或多个内部事件队列中。在效率和函数调用的开销方面,你只能提供你将要使用的钩子的实现。

checkin tt> dbapi_concon_record

连接返回到池时调用。

请注意,连接可能已关闭,如果连接已失效,则可能为“无”。checkin will not be called for detached connections. (他们不回到游泳池。)

dbapi_con
原始的DB-API连接
con_record
持续管理连接的_ConnectionRecord
结帐 tt> dbapi_concon_recordcon_proxy ¶ T6>

在从池中检索连接时调用。

dbapi_con
原始的DB-API连接
con_record
持续管理连接的_ConnectionRecord
con_proxy
管理当前结帐范围的连接的_ConnectionFairy

如果引发一个exc.DisconnectionError,当前连接将被丢弃,并重新获得一个连接。所有结帐监听器的处理将中止并重新启动使用新的连接。

连接 tt> dbapi_concon_record

为每个新的DB-API连接或池的creator()调用一次。

dbapi_con
新连接的原始DB-API连接(不是SQLAlchemy Connection包装器)。
con_record
持续管理连接的_ConnectionRecord
first_connect(dbapi_con, con_record)

为第一个DB-API连接调用一次。

dbapi_con
新连接的原始DB-API连接(不是SQLAlchemy Connection包装器)。
con_record
持续管理连接的_ConnectionRecord