有没有办法让SQLAlchemy不在BEGIN和COMMIT中包装SQL写入?

时间:2010-12-08 22:31:06

标签: python sqlalchemy pylons

我在Pylons 1.0框架上使用SQLAlchemy 0.6.4。我已经尝试了将autoflush和autocommit设置为True和False的每个排列,但我发现SQLAlchemy想要用BEGIN / COMMIT包装所有SQL会话或写入。我在models / meta.py中配置了scoped_session,如下所示:

"""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()

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

看起来不像:

  

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