2013-03-29 70 views
0

我正在運行一個腳本,每2秒從數據庫中提取一次數據,然後將結果傳遞給創建多個線程並處理返回數據的函數。後續While循環無法刷新數據庫查詢

我的查詢返回在數據庫中都標記爲is_deleted = False的項目。在下面的代碼中,如果說我在數據庫中有一個成員,並且我將它們標記爲已刪除,甚至實際上刪除它們,我期望member.get_member()返回「無」,我用if statement處理。問題是,即使我在腳本已經運行時從數據庫中刪除該成員,它也會帶回「數據」,而它應該帶回「無」。如果我停止腳本,然後再次運行它,然後它獲取正確的數據,因爲它返回通過試行「無」

正在運行Python3.2與SQLAlchemy的0.8

def main(): 
    while True: 
     time.sleep(2) 
     member = Member() 
     myData, instance_counter = member.get_member() 
     if myData == None: 
      print("No member registered yet:", get_time_now()) 
     else: 
      myqueuing(instance_counter, myData) 
      dbase.session.commit() 

if __name__ == '__main__': 
    main() 

回答

0

我已經找到了答案,並錯誤。在您執行數據庫查詢之前運行session.close_all(),如下所示。

如果session.close_all()甚至會關閉被調用以處理所提取數據的線程正在運行的會話,但不確定的是什麼。如果它會結束這些會議,然後回到繪圖板,我需要你的幫助。

def main(): 
    while True: 
     time.sleep(2) 

     #This solved it but am not sure if it will close other sessions 
     #that have been spawned by the threads 
     dbase.session.close_all() 

     member = Member() 
     myData, instance_counter = member.get_member() 
     if myData == None: 
      print("No member registered yet:", get_time_now()) 
     else: 
      myqueuing(instance_counter, myData) 
      dbase.session.commit() 

if __name__ == '__main__': 
    main()