2013-06-27 62 views
1

models.py從insterted記錄獲取ID在SQLAlchmey

class User(Base): 
    __tablename__ = 'users' 
    id = Column(Integer, primary_key = true, autoincrement=true) 
    ... 

views.py

entry = User() 
with transaction.manager: 
    DBSession.add(entry) 
    DBSession.flush() 
transaction.commit() 
pdb.set_trace() 

現在,當我運行

print user.id 

我得到

DetachedInstanceError: Instance <Userat 0x3ebc310> is not bound to a Session 

如果我如果改變從附加合併它只是給我

none 

不知道我做錯了,或如何解決它。

回答

2

如果您刪除手動擺弄與transaction一切正常:

entry = User() 
DBSession.add(entry) 
DBSession.flush() 
print entry.id 

由於您使用的金字塔ZopeTransactionExtension最好是避免與交易處理手動和它留給金字塔 - 的交易將被提交如果您的代碼引發異常,則返回成功並回滾。

+0

謝謝。出於某種原因,我認爲你必須使用事務管理器來處理所有事情。 – Krayons