我创建了一个python + sqlalchemy的东西。细节并不重要。它创建和管理数据库,从中读取信息,与外部组件联系并更新数据库。它有几个线程来启用并行处理,并使用scoped_session对象为每个线程创建一个会话对象。重入锁可以防止线程创建数据库冲突。
很酷,它有效。
现在我需要一个GUI来检查和修改数据库。我安装了烧瓶和烧瓶管理员。
坏。它不再起作用了。
主程序基本上启动所有后台处理线程,然后将控制传递给主程序中的flask循环。只要我不用gui做任何数据库操作,它就可以工作。只要我在flask-admin中读取数据库,我的工作线程就会开始抛出异常。
我的第一次尝试创建了“会话中不存在的对象”错误。显然,flask-admin会在某些时候冲洗所有内容。
在我的第二次尝试中,我将session.add()添加到我的工作线程中,以便在它们被使用之前将对象添加回它们的会话,以防它们被烧瓶分离。不行。尽管没有修改任何内容,但出现断言错误“密钥的身份映射中已存在冲突状态...”。
在我的第三次尝试中,我尝试使用merge而不是add()。现在我开始获得嵌套回滚错误。
这是一个绝望的工具组合吗?
这不是关键任务应用程序,我可以根据工作线程中的需要经常刷新数据库。它不需要提供最佳性能。它只需要工作。
[R