【问题标题】:Can I query a secondary database from Django without ORM?我可以在没有 ORM 的情况下从 Django 查询辅助数据库吗?
【发布时间】:2018-09-01 15:25:54
【问题描述】:

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

我在 Django 中配置了一个辅助数据库连接,但由于这些表是在其他地方控制的,因此它们不能完全适合 Django 的 ORM。我宁愿在我的 Django 应用程序中进行简单的 SQL 查询。

这可能吗?

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    你有两个选择:

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

    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 定义模型,不要忘记在模型的 Meta 中设置 managed = False 和正确的 table_name
      • 使用ModelInSecondDb.objects.using('second').all() 查询您的第二个数据库
      • (可选)添加一个数据库路由器类,该类会自动将针对这些模型的所有查询定向到您的 second 数据库。

    【讨论】:

    • managed = False 正是我需要的,谢谢?除了“没有 ORM”,你能提出一个更好的方式来表达我的问题吗?
    • “没有 ORM”是正确的搜索方式,这就是我到达这里的方式。
    【解决方案2】:

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

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

    在 django ORM 中你可以这样做:

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

    check out django docs here

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 2013-09-29
      相关资源
      最近更新 更多