2013-06-27 4 views
1

models.pyПолучение идентификатора из insterted записи в 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