2013-11-27 31 views
1

以下每個函數都無法更新記錄〜10%的時間。我不瞭解sqlalchemy?謝謝!sqlalchemy不一致的行更新

def update_field_1 (session, rec): 
    rec.field1 = 'hello' 
    session.merge(rec) 
    return 

def update_field_2 (session, rec):   
    session.query(TableName).filter(TableName.id==rec.id)\ 
     .update({"field2": "hello"}) 
    return 

# create conn/session 
# create record 
session.add(record) 
session.commit() 

update_field_1 (session, record) 
update_field_2 (session, record) 

session.commit() 
# close session/conn 

回答

0

用我自己的測試解決了這個謎題。在此發帖以幫助任何人搜索...

該代碼有點簡化。我們真的看到更像這樣的東西:

if something: 
    session.add(record) 
    session.commit() 
else: 
    session.rollback() 

if something_else: 
    update_field_1 (session, record) 
    update_field_2 (session, record) 
else: 
    session.rollback() 

發現錯誤?首先需要的功能,做這樣的事情:

session.merge(rec) 
session.commit() 

第二種情況下,如果附加承諾不會發生,有一個在會議上沒有ID將失敗。