2011-03-19 58 views
2

我有一个django applicationaiton与多个数据库。默认数据库位于本地计算机上。还有一个远程mysql数据库用于一些写操作,但它并不总是起作用。当服务器关闭时,mysqldb引发一个OperationalError。Django的多个数据库 - 无法连接到mysql服务器回退到sqlite

我想要一个名为'fallback'的本地sqlite数据库,它将在mysql服务器关闭时接受数据。我意识到这涉及django.db.mysql.base中的try/except子句,但我不确定从那里去哪里。有没有人试过类似的东西?你有更好的方法来处理这个问题的建议吗?

回答

1

您或许可以使用Database Routers与替代save方法的自定义基本模型类组合使用。将它包装在try..catch中,如果发生OperationalError,请提供一些提示,以便数据库路由器可以确定是否需要使用回退。

我认为这将是最干净的方式,而不是修改Django代码本身。

+0

+1为说服我不要修改Django代码。由于写入远程数据库的特定性质,我没有使用路由器。在http://stackoverflow.com/questions/4945295/django-multiple-databases-one-not-always-available/查看我的解决方案。由于connection_created信号处理程序中存在相关错误,它一直没有工作。 – AgDude 2011-03-19 12:06:51

+0

路由器不处理数据库连接和游标(它们负责OperationalError)。他们只是选择一个数据库别名,也就是说在您的settings.DATABASES字典中输入密钥。你有没有找到另一种方法来测试数据库连接,并选择另一种作为后备? – Oberix 2014-10-22 16:57:21

+0

你是对的@Marco。我现在建议做一个尝试:。使用['primary'],除了:.using ['backup']在保存方法中。 – 2014-10-22 23:36:56