【问题标题】:Django: "show databases" functionality?Django:“显示数据库”功能?
【发布时间】:2012-01-26 18:01:17
【问题描述】:

我有一个奇怪的遗留数据库用例:我有多个数据库,具有 (1) 完全相同的架构,但 (2) 非常不同的数据集。每周都会将具有此架构的数据库、整个数据库添加到总数据集中。

有没有办法 (1) 内省 服务器 以找出可用的数据库,如果是的话,有没有办法 (2) 通过 URL 路由到正确的数据库,而不是比当前的每个模型解决方案(因为我的模型没有改变,只有关联的基础表)?

这种自省是否可以动态进行,这样每次有人点击主页时,我都可以向他们展示可用数据库的列表?

当然,通用解决方案更可取,但目前可以接受仅 MySQL 的解决方案。

(欧洲分子生物学实验室基因组库中的用例,每隔几个月发布一次,作为一套 MySQL 数据库转储,每个物种一个数据库,具有大约 20 个表的核心架构,可以很好地映射到 6 个左右应用程序。架构是稳定的,多年来没有改变。)

【问题讨论】:

    标签: django mysql-python


    【解决方案1】:

    是的,您可以run any raw SQLshow databases 也不例外。但是很难更改可用数据库的列表并在它们之间切换。恐怕这需要对 django 的内部进行修改或猴子修补。

    更新:等等!我查看了django.db.connections 背后的代码,发现如果您只是在运行时扩展settings.DATABASES,那么您将能够在代码中使用SomeModel.objects.using('some-new-database').all()。尚未测试,但相信这应该可行!

    【讨论】:

    • 谢谢。我研究了你的建议,效果很好。那和一些线程本地的东西,我可以根据需要使用一些中间件来切换数据库。遗憾的是,Django 不能使用 EMBL 数据集,因为它们是用无 PK 表明确制作的。这样的黑客......
    • 欧洲分子生物学图书馆提供的冷冻基因组数据集。有关详细信息,请参阅 ensembl.org。我们正在尝试将这些数据集用作商业项目的附属物,问题是我们从哪一层开始:数据库、定制的 ORM(用非常冗长、非常迂腐的 Perl 编写)还是更高?
    • 事实证明,我必须使用 SqlAlchemy 来访问 EMBL 集,所以该网站是 Django 的 ORM 的奇怪混合体,用于某些事物,而 SqlAlchemy 用于其他事物。
    猜你喜欢
    • 2018-10-10
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多