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

时间:2015-02-28 21:50:08

标签: python mysql django database legacy

我有一个用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不适合的情况,那将会非常有帮助。

1 个答案:

答案 0 :(得分: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