在同一个数据库上同时使用SQLAlchemy和Django ORM

时间:2012-06-01 21:16:24

标签: python django postgresql orm sqlalchemy

我有两个应用程序都访问同一个数据库。第一个客户端通过TCP连接并使用SQLAlchemy写入数据库。第二个是使用Django的更典型的webapp。两者都有读/写要求。

我想统一数据库访问层,但只选择SQLAlchemy或只是Django是没有吸引力的,因为:

  1. 我想使用django auth,权限,以及第三方插件,这些插件需要Django ORM(如果我错了,请纠正我)。
  2. 对于第一个应用程序,使用SQLAlchemy(到目前为止)要比在Django应用程序之外使用Django ORM简单得多 - 它是一个TCP / IP服务器应用程序,而不是HTTP / Web应用程序。
  3. 在同一个数据库中混合使用这两个ORM有什么问题吗?

    我应该在哪个系统(Django,SQLA)中创建模型,而不是使用某种内省,例如Django inspectdb

1 个答案:

答案 0 :(得分:6)

首先 - 在manage.py WSGI处理程序和其他HTTP相关的东西之外使用Django ORM并不是很难。您可以使用任何python脚本,但它需要一些初始化(example)。

其次 - SQLA是一个非常强大的工具,它可以做一些在Django ORM中很难实现的东西(比如真正的多态和多态查询)。如果我必须选择,我个人会选择使用Django ORM作为创建模型的平台,然后在SQLA中手动映射它们,因为它更灵活,并且希望能够采用。在相反的情况下,这可能不起作用。

最后,既然你可以在双方使用Django ORM,而你只是必须使用Django ORM因为插件,我建议放弃SQLA。它是一个强大的工具,但也相当复杂。在一个数据库上运行两个不同的ORM可能会在将来导致意外问题并增加应用程序的复杂性,因此维护起来会更困难。