2010-12-08 37 views
2

我在Pylons 1.0框架上使用SQLAlchemy 0.6.4。我已经尝试了将autoflush和autocommit设置为True和False的所有排列,但是我发现SQLAlchemy想要包装所有SQL会话或使用BEGIN/COMMIT进行写入。我已经配置了scoped_session在模型/ meta.py如下:有没有办法让SQLAlchemy不会在BEGIN和COMMIT中包装SQL写入?

"""SQLAlchemy Metadata and Session object""" 

from sqlalchemy import MetaData 

from sqlalchemy.ext.declarative import declarative_base 

from sqlalchemy.orm import scoped_session, sessionmaker 

__all__ = ['Base', 'Session'] 

# SQLAlchemy session manager. Updated by model.init_model() 
Session = scoped_session(sessionmaker(autoflush=False, autocommit=True)) 

# The declarative Base 
Base = declarative_base() 

metadata = MetaData() 

回答

1

看起来不像是:

虽然许多DBAPIs实现一个叫自动提交标志,目前SQLAlchemy的行为是这样的:它实现了自己的自动提交。这是通过检测代表数据更改操作的语句(即INSERT,UPDATE,DELETE等),然后在没有事务正在进行时自动发出COMMIT来实现的。

+0

在SELECT之后COMMIT/ROLLBACK也很重要,例如,在重复查询中:除非将隔离级别更改为READ COMMITTED或READ UNCOMMITTED,否则DB会在第一次查询时执行快照。 – 2010-12-10 15:20:27

2

如果您的问题在于此行为的缓慢性,那么解决方案可能是在您的应用程序中以某种明智的方式开始/结束事务。

相关问题