2010-12-08 34 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

如果您的問題在於此行爲的緩慢性,那麼解決方案可能是在您的應用程序中以某種明智的方式開始/結束事務。

相關問題