2013-03-14 62 views
0

我在SQLAlchemy的會議的一個問題,當我在它的確定數據庫中添加一行,但如果我想添加另一行,但不關閉我的應用程序,它不添加SQLAlchemy的會話錯誤

這是我的型號中的功能:

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 2013-03-14 14:32:30

回答

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 2013-03-15 16:46:41