Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlalchemy不一致的行更新_Python_Sql_Sqlalchemy - Fatal编程技术网

Python sqlalchemy不一致的行更新

Python sqlalchemy不一致的行更新,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,以下每个函数都有10%的时间无法更新记录。我对炼金术有什么不了解?谢谢 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 )\ .

以下每个函数都有10%的时间无法更新记录。我对炼金术有什么不了解?谢谢

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

通过我自己的测试解决了这个谜。在此发布以帮助任何人搜索

代码有点简化。我们确实看到了更像这样的情况:

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()
发现错误了吗?需要第一个函数来执行以下操作:

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,则将失败