Django 多个数据库 - 无法连接到 mysql 服务器回退到 sqlite
Posted
技术标签:
【中文标题】Django 多个数据库 - 无法连接到 mysql 服务器回退到 sqlite【英文标题】:Django multiple databases - can't connect to mysql server fallback to sqlite 【发布时间】:2011-07-18 13:27:19 【问题描述】:我有一个包含多个数据库的 django 应用程序。默认数据库位于本地计算机上。还有一个远程 mysql 数据库用于一些写操作,但它并不总是启动。当服务器关闭时,mysqldb 会引发 OperationalError。
我想要一个名为“fallback”的本地 sqlite 数据库,如果 mysql 服务器关闭,它将接受数据。我意识到这涉及 django.db.mysql.base 中的 try/except 子句,但我不太确定从那里去哪里。有没有人尝试过类似的东西?您对处理此问题的更好方法有什么建议吗?
【问题讨论】:
【参考方案1】:您可以将Database Routers 与覆盖save
方法的自定义模型基类结合使用。将其包装在 try..catch
中,如果发生 OperationalError,请提供一些提示,以便您的数据库路由器可以确定是否需要使用回退。
我认为这将是最干净的方式,而不是修改 django 代码本身。
【讨论】:
+1 说服我不要修改 django 代码。由于写入远程数据库的特殊性质,我没有使用路由器。在***.com/questions/4945295/… 上查看我的解决方案。由于 connection_created 信号处理程序中的相关错误,它没有工作。 路由器不处理数据库连接和游标(它们负责操作错误)。他们只是选择一个数据库别名,也就是说你的 settings.DATABASES 字典中的键。您是否找到了另一种方法来测试数据库连接并选择另一个作为后备? 你是对的@Marco。我现在建议尝试一下: .using['primary'] except: .using['backup'] 在 save 方法中。以上是关于Django 多个数据库 - 无法连接到 mysql 服务器回退到 sqlite的主要内容,如果未能解决你的问题,请参考以下文章
无法使用便携式 Xampp 通过 Django 连接到 MySQL
无法在 Ubuntu 上使用 Django 连接到 Oracle 数据库
django.db.utils.OperationalError:无法连接到服务器:没有这样的文件或目录
Django docker 容器无法连接到 mysql 容器,出现错误“无法连接到 'db' (111) 上的 MySQL 服务器”)