将 Django 与包含多个表的遗留数据库一起使用

Using Django with legacy databases containing multiple tables

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

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...

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

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

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

是否有可能有简单的代码基本上告诉 django:"Go to database x, look at table y, and select the following columns" 即使这意味着绕过模型的使用并且只是将数据读入数组?

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

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

你知道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