我有一个典型的Django项目,其中包含一个主数据库,我可以保存所需的所有数据。
假设某个地方有另一个数据库,其中包含一些其他信息。该DB与我的Django项目没有直接关系,所以让我们假设我甚至没有控制权。
问题是我确实知道是否需要为这个外部数据库创建和维护模型,所以我可以使用Django的ORM。或者最好的解决方案是使用原始SQL从外部数据库获取数据,然后使用此ifo使用ORM从主数据库中过滤数据,或者直接在视图中过滤数据。
创建模型的解决方案似乎相当不错,但DB不是我项目的一部分,这意味着我不知道可能的架构变化,看起来它是一个不好的做法。 / p>
所以最后如果我有一些外部资源,比如与我的项目无关但需要的DB,我应该:
答案 0 :(得分:2)
另一种方法是将SQLAlchemy用于外部数据库。它可以使用reflection在运行时生成SQLAlchemy等效的django模型。
它仍然不会没有问题。如果您的代码依赖于某个列,那么如果以不兼容的方式删除或更改该列,它仍会中断。但是,它会为您的数据库交互添加更多灵活性,例如如果int
列更改为varchar
列,Django模型肯定会中断,但使用数据库反射,只有当您的代码依赖于它是int
这一事实时,它才会中断。如果您只是显示数据或其他内容,它将保持完全正常运行。但是,更改不会破坏系统,但会导致意外行为。
如果像Benjamin说的那样,外部系统有一个API,那将是首选。
答案 1 :(得分:0)
我建议您阅读有关inspectdb和数据库路由器的信息。可以使用django ORM来操作外部DB。 https://docs.djangoproject.com/en/1.7/ref/django-admin/#inspectdb
答案 2 :(得分:0)
我会在外部数据库上创建最小的django模型=>与您的代码互动的那些:
对此有几个结果