Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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 Sql炼金术重复提交_Python_Sqlalchemy_Commit_Duplicate Data - Fatal编程技术网

Python Sql炼金术重复提交

Python Sql炼金术重复提交,python,sqlalchemy,commit,duplicate-data,Python,Sqlalchemy,Commit,Duplicate Data,我目前在Cherrypy应用程序中面临一个问题。 Im我自己的自定义会话模块,在执行session.add时,完全相同的对象会更新两次 cherrypy.request.SessionManager.user_data = user try: db_session.add(cherrypy.request.SessionManager) db_session.commit() 会回来的 2011-06-21 09:16:48,991 INFO sqlalchemy.engi

我目前在Cherrypy应用程序中面临一个问题。 Im我自己的自定义会话模块,在执行session.add时,完全相同的对象会更新两次

cherrypy.request.SessionManager.user_data = user

try:

    db_session.add(cherrypy.request.SessionManager)
    db_session.commit()
会回来的

2011-06-21 09:16:48,991 INFO sqlalchemy.engine.base.Engine.0x...04cL BEGIN (implicit)
2011-06-21 09:16:49,015 INFO sqlalchemy.engine.base.Engine.0x...04cL SELECT ..... 
FROM "Clients_Users" 
WHERE "Clients_Users".username = %(username_1)s AND "Clients_Users".password = %(password_1)s 
LIMIT 1 OFFSET 0
2011-06-21 09:16:49,015 INFO sqlalchemy.engine.base.Engine.0x...04cL {'password_1': '123', 'username_1': u'1'}
2011-06-21 09:16:49,047 INFO sqlalchemy.engine.base.Engine.0x...04cL UPDATE "SYS_Sessions" SET user_data=%(user_data)s WHERE "SYS_Sessions".id = %(SYS_Sessions_id)s
2011-06-21 09:16:49,067 INFO sqlalchemy.engine.base.Engine.0x...04cL {'SYS_Sessions_id': 92L, 'user_data': <psycopg2._psycopg.Binary object at 0x8a7c06c>}
2011-06-21 09:16:49,071 INFO sqlalchemy.engine.base.Engine.0x...04cL COMMIT
2011-06-21 09:16:49,093 INFO sqlalchemy.engine.base.Engine.0x...04cL BEGIN (implicit)
2011-06-21 09:16:49,095 INFO sqlalchemy.engine.base.Engine.0x...04cL UPDATE "SYS_Sessions" SET user_data=%(user_data)s WHERE "SYS_Sessions".id = %(SYS_Sessions_id)s
2011-06-21 09:16:49,095 INFO sqlalchemy.engine.base.Engine.0x...04cL {'SYS_Sessions_id': 92L, 'user_data': <psycopg2._psycopg.Binary object at 0x8a8424c>}
2011-06-21 09:16:49,108 INFO sqlalchemy.engine.base.Engine.0x...04cL COMMIT
以前有人见过这个吗


另外,在我制作的其他模块中,这种情况不会发生。

您可以尝试将用户数据添加到会话中,而不是将SessionManager对象本身添加到会话中。这至少会使调试更加简单

事实上,我不确定cherrypy SessionManager中是否有数据库会话—这似乎不太理想,但可能sqlalchemy可以处理它,或者可能正在对对象进行多次更改,而这些更改不能在数据库中同时完成—例如,可能这就是某些启用echo的级联的外观。您使用的级联值是多少


我不确定读取sql后第二次更新的是什么。这看起来只是一些隐含的东西。您可能需要显示这些对象的一些代码,或者显示导致更新获得更好答案的一些代码。但也许上述直觉会有所帮助。祝你好运好的,很抱歉耽搁了这么久,但我正在度假

无论如何,为了防止双重提交,您需要从会话中删除对象,并使用

还有一件事

使用 将允许您重新使用已删除的对象

希望这能帮助有需要的人

附言:要考虑到一个物体可能会有不正常的行为,或者任何未来的炼金术补丁可能会破坏兼容性。所以亵渎是正确的