【问题标题】:Using Django with legacy databases containing multiple tables将 Django 与包含多个表的遗留数据库一起使用
【发布时间】:2015-02-28 21:50:08
【问题描述】:

我有一个用 php 编写的旧应用程序,它提供对组织成 37 个不同数据库的大型数据集的访问,每个数据库包含许多表。每个表代表不同设备的数据,每个数据库代表单个时间段的数据,所以结构如下:

Database_Time_Period_one   
 table machine 1
 table machine 2
 table machine 3
 and so on...

Database_Time_Period_two
 table machine 1
 table machine 2
 table machine 3
 table machine 4
 and so on...

这些表的长度各不相同,但通常包含 500,000 到 1,000,000 行数据。

该应用程序需要扩展并且需要一个新的前端,并且正在考虑使用 Django 对其进行改造,但我遇到了一个概念问题,希望有人能提供帮助。 php 代码非常简单——用户在前端选择时间段和感兴趣的表,这用于构建一个 MySQL SELECT 查询,该查询检索相关数据,然后将其存储在一个数组对象中。该查询是在一行代码中构建的,该代码基本上使用从前端获取的一个变量来标识数据库,另一个用于表。数据库和表的命名遵循包含顺序数字组件的模式,这简化了查询的构建。

根据我最初涉足 Django 时的理解,django 模型表示来自单个数据库的单个表,因此为了能够访问不同数据库中的所有表,我需要为每张桌子。这意味着拥有大约 200 个模型。另外,我需要一些方法来告诉 django 模型应该链接到哪个数据库和该数据库中的哪个表。最后,我必须能够在代码中选择用于任何给定查询的模型。我对此进行了研究,似乎可以这样做,但这意味着要创建大量路由器,并且与相对简单的php代码相比,需要大量代码。

是否有可能有简单的代码基本上告诉 django:“转到数据库 x,查看表 y,然后选择以下列”,即使这意味着规避模型的使用并将数据读入大批?

我已经在网上搜索了一个解决方案,但找不到一个似乎可以解决这种情况的示例,虽然 django 文档确实解释了多个数据库的使用,但它似乎没有提供一种简单的方法来解决这个问题访问我拥有的数据库而不创建看起来非常庞大且繁琐的代码体,并且使用原始查询的解释似乎仍然依赖于“每个表一个模型”范例。我确信我的困难是由于我对 Django 的经验有限,并且有一种方法可以做我想做的事,但我现在被卡住了。

如果有人比我有更多的 django 经验,可以为我指出正确的方向,或者告诉我这是否看起来像 django 不适合的情况,这将非常有帮助。

【问题讨论】:

    标签: python mysql django database legacy


    【解决方案1】:

    你知道django的inspectdb管理命令吗:

    $ python manage.py inspectdb > models.py
    

    这将为您生成模型,您可以从中使用 django orm 对数据执行任何您需要执行的操作。

    http://docs.djangoproject.com/en/dev/ref/django-admin/#inspectdb

    https://docs.djangoproject.com/en/1.7/howto/legacy-databases/

    如果您认为这样更容易,您可以直接编写 sql 代码而不是制作模型。看这里:https://docs.djangoproject.com/en/1.7/topics/db/sql/#executing-custom-sql-directly

    【讨论】:

    • 是的,我看过了,但我认为它仍然为每个表创建了一个模型,这将使​​我拥有来自所有不同表的大约 200 个模型。可能我只需要弄清楚如何使用这么多模型,但我觉得应该有一种方法可以绕过 orm,直接进入我想要的表并将数据加载到数组中。然后我什至可以将数组中的数据复制到通用模型中。
    • 谢谢,我点击了您为自定义 sql 提供的链接,它看起来就像我正在寻找的。不知道在浏览文档时我是如何错过它的。我会花一些时间使用它,看看我是否可以或多或少地复制原始 php 版本的功能。
    • 很好,你能选择我的答案吗?
    • 我认为它基本上可以工作并且会选择你的答案,但我遇到了 500 服务器错误 'tuple' 对象没有属性 'id' 的问题 - (id 是表的第一列我正在努力阅读)。我检查了一些关于将 SQL 输出转换为 json 的参考资料,但有些东西显然不起作用。
    • 最终评论 - 我找出了与元组有关的错误的来源。有一个 ajax 调用将数据发送到前端,但在服务器端没有正确格式化。再次感谢您在这方面引导我朝着正确的方向前进。
    猜你喜欢
    • 2012-09-30
    • 2015-12-19
    • 2013-08-07
    • 2016-08-27
    • 2011-12-20
    • 2021-08-26
    • 1970-01-01
    • 2013-01-13
    • 2011-01-17
    相关资源
    最近更新 更多