关于mysql:Python / Django 1.5 DatabaseWrapper线程错误

Python/Django 1.5 DatabaseWrapper thread error

运行server并尝试加载Web应用程序的本地版本时,在django 1.5.1(和1.5.0)和mysql中引发以下数据库错误:

DatabaseError at /

DatabaseWrapper objects created in a thread can only be used in that
same thread. The object with alias 'default' was created in thread id
4365488128 and this is thread id 140735183980896.

异常位置如下:

/Users/USERNAME/.envs/PROJECT_NAME/lib/python2.7/site-packages/django/db/backends/init.py
in validate_thread_sharing, line 154

这只在第一页加载时发生。当我点击刷新时,Web应用程序会按预期加载。当我更改django/python代码并且本地服务器需要重新验证时,返回错误。当发生这种情况时,第一次加载再次引发数据库错误,随后的加载再次不会。

这个问题只发生在我的Django 1.5项目上。我已经卸载了mysql并清除了位于/usr/local/var/mysql中的mysql二进制文件。新安装的mysql并没有解决这个问题。

这里讨论了一个类似的数据库错误,但我无法遵循它们的解决方案:

https://code.djangoproject.com/ticket/17998

我在这里不知所措,任何想法或专业知识都会受到赞赏。谢谢您。


我在进口Django之前通过猴子修补解决了这个问题。

1
2
import eventlet
eventlet.monkey_patch()

你比我在这里用线还明白。


这适用于1.4,但问题的原因可能与您的相同:

https://bitback.org/akoha/django-digest/issue/10/conflict-with-global-databasewrapper

在这篇文章中,有两种可能的解决方案,尽管看起来都是解决办法:

"我可以通过在db.py中评论关闭连接来解决问题。"

"一个肯定有效的修复方法是用django.db.connection和django.db.tranasction替换multidb/get_default_db()/self.db,如:https://docs.djangoproject.com/en/dev/topics/db/sql/直接执行自定义SQL中所述。"