【问题标题】:Django multiple databases - can't connect to mysql server fallback to sqliteDjango 多个数据库 - 无法连接到 mysql 服务器回退到 sqlite
【发布时间】:2011-07-18 13:27:19
【问题描述】:

我有一个包含多个数据库的 django 应用程序。默认数据库位于本地计算机上。还有一个远程 mysql 数据库用于一些写操作,但它并不总是启动。当服务器关闭时,mysqldb 会引发 OperationalError。

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

【问题讨论】:

    标签: mysql django django-orm


    【解决方案1】:

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

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

    【讨论】:

    • +1 说服我不要修改 django 代码。由于写入远程数据库的特殊性质,我没有使用路由器。在stackoverflow.com/questions/4945295/… 上查看我的解决方案。由于 connection_created 信号处理程序中的相关错误,它没有工作。
    • 路由器不处理数据库连接和游标(它们负责操作错误)。他们只是选择一个数据库别名,也就是说你的 settings.DATABASES 字典中的键。您是否找到了另一种方法来测试数据库连接并选择另一个作为后备?
    • 你是对的@Marco。我现在建议尝试一下: .using['primary'] except: .using['backup'] 在 save 方法中。
    猜你喜欢
    • 2020-10-24
    • 2013-04-14
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    相关资源
    最近更新 更多