我可以在没有ORM的情况下从Django查询辅助数据库吗?

时间:2018-09-01 15:25:54

标签: python django django-queryset

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

我已经从Django内部配置了辅助数据库连接,但是由于表是在其他位置控制的,因此它们不能很好地适合Django的ORM。我宁愿在Django应用程序中进行简单的SQL查询。

这可能吗?

2 个答案:

答案 0 :(得分:5)

您有两个选择:

  1. 无ORM:
    只需为第二个数据库(对于MySQL,MySQLdb,对于PostgreSQL,psycopg2)安装并导入Python驱动程序,然后创建连接并运行纯SQL查询,而无需使用Django。有关详细信息,请参见相应数据库驱动程序的文档。

  2. 具有ORM功能的

    • 在您的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_name和正确的Meta
    • 使用ModelInSecondDb.objects.using('second').all()
    • 查询第二个数据库
    • (可选)添加数据库路由器类,该类将自动将对这些模型的所有查询定向到您的second数据库。

答案 1 :(得分:0)

您可以在Django设置中定义其他数据库配置,例如:

DATABASES = {
  'default': {},
  'another_db' : {
    ...
  }
}

在django ORM中,您可以执行以下操作:

another_db_table.objects.using('another_db').all()

check out django docs here