2013-03-14 5 views
0

У меня есть проблема с сессии в SQLAlchemy, когда я добавить строку в БД, это нормально, но если я хочу добавить еще одну строку, не закрывая мое приложение, не добавляетSQLAlchemy Session ошибка

Этот является функцией в моей модели:

def add(self,name): 
    self.slot_name = name 
    our_slot = self.session_.query(Slot).filter_by(slot_name = str(self.slot_name)).first() 
    if our_slot: 
     return 0 
    else: 
     self.session_.add(self) 
     self.session_.commit() 
     return 1 
+0

Попробуйте эти два названия: «Pacey Ennis», «Silvanus Yuliy». Они оба добавляются? – OregonTrail

ответ

0

Проблема в том, что вы совершаете свою сессию. После завершения сеанса он закрыт. Либо вы совершаете после того, как вы закончите добавление, либо вы откроете новый сеанс после каждой фиксации. Также взгляните на Session.commit(). Вероятно, вы должны прочитать что-то о сеансах в SQLAlchemy's documentation.

Кроме того, предлагаю вам сделать это:

def add(self,name): 
    self.slot_name = name 
    try: 
     our_slot = self.session_.query(Slot)\ 
     .filter_by(slot_name = str(self.slot_name)).one() 
     self.session_.add(self) 
     return 1 
    except NoResultFound: 
     return 0 

Конечно, это работает только, если вы ожидаете ровно один результат. Считается хорошей практикой поднимать исключения и ловить их, а не создавать условия.

+0

Спасибо, но это не решило мою проблему, когда я сначала добавляю «A», затем «B», строка «A» перезаписывается «B». Я решаю свою проблему, обновляя объект в контроллере. – user2167145

Смежные вопросы