sqlalchemy不一致的行更新

时间:2013-11-27 15:57:39

标签: python sql sqlalchemy

以下每个功能都无法更新记录~10%的时间。我对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

1 个答案:

答案 0 :(得分: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,则会失败。