首页 > 解决方案 > 我可以在没有 ORM 的情况下从 Django 查询辅助数据库吗?

问题描述

我需要从我的 Django 应用程序中查询由另一个应用程序控制的数据库。理想情况下,我还想修改一些值。

我已经在 Django 中配置了一个辅助数据库连接,但是因为这些表是在其他地方控制的,所以它们不能很好地融入 Django 的 ORM。我宁愿从我的 Django 应用程序中进行简单的 SQL 查询。

这可能吗?

标签: pythondjangodjango-queryset

解决方案


你有两个选择:

  1. ORM-less:只需为您的第二个数据库(用于 MySQL、PostgreSQL 等)
    安装和导入 Python 驱动程序,然后创建连接并运行纯 SQL 查询,而无需使用任何 Django。这方面的详细信息可以在相应数据库驱动程序的文档中找到。MySQLdbpsycopg2

  2. ORM-ful:

    • 在您的添加第二个数据库settings.py

      DATABASES = {
        'default': {
          # your Django db settings here
        },
        'second': {  # any name can be used
          # your second db settings here
        }
      }
      
    • 使用 Django ORM 定义您的模型,并且不要忘记在模型中设置managed = False和正确的.table_nameMeta
    • 查询您的第二个数据库ModelInSecondDb.objects.using('second').all()
    • 或者,添加一个数据库路由器类,该类会自动将这些模型的所有查询定向到您的second数据库。

推荐阅读