gpt4 book ai didi

python - 在 Django 中使用多个数据库,让另一个数据库包含不是由任何模型创建的表

转载 作者:行者123 更新时间:2023-11-29 13:09:20 24 4
gpt4 key购买 nike

以下是我的问题,如果您想了解详细信息,请参阅下面的内容(抱歉,帖子很长,我希望查询尽可能详细):

问题

  1. 是否可以从外部数据库检索数据并在您的 Django 项目中使用这些数据,即使该数据库中的表不是作为模型创建的?如果是这样,实现这一目标的基本概念是什么。

  2. 如果不是,那么剩下的解决方法是使用与远程数据库相同的数据库,并将 django 项目的所有模型保存到该数据库中的特定模式中?


所以我们试图强行执行Cross-database referencing使用远程数据库 my_remote_db ,其中包含不是由 Django 模型创建的表。

我们已经阅读了 Django 文档,告诉它目前无法处理这种引用方法,但事实上我们可以在 settings.py 中定义多个数据库。让我们乐观地认为有某种解决方法。

我们的 settings.py 中定义的数据库

  • django_project_db - 主数据库(我们的 Django 项目为其模型使用的数据库)
  • my_remote_db - 远程数据库。几个应用程序正在使用这个数据库,例如我们的 Scout 和 PHP 应用程序等。

enter image description here

我们想要实现的目标:

从远程数据库中检索数据(表未创建为 model)并在我们的 Django 项目中使用这些信息。

示例用法:

假设我们要创建一个模型 LeaveRequest在我们的 Django 项目中包含一个名为 employee 的字段其值为员工的 idmy_remote_db.my_schema.employees 中的远程数据库引用表。

在管理门户中,添加新的休假请求时,我们需要 employee字段是员工的下拉列表。

因为不可能使用models.ForeignKey由于远程数据库的表不是作为模型创建的,因此我们只想预填充 employee通过执行原始 SQL 命令字段并将结果作为 choices[('value','text')} 传递例如employee = models.IntegerField(choices[('1','Leonard Hofstadter'),('2','Sheldon Cooper')]

附言

我们已经尝试在 python shell 中运行以下命令,我们会得到

NotSupportedError: cross-database references are not implemented: "my_remote_db.my_schema.employees"

from django.db import connection
with connection.cursor() as cursor:
cursor.execute("SELECT first_name FROM my_remote_db.my_schema.employees WHERE id=1")
row = cursor.fetchone()
print(row)

附加说明:

远程数据库将与我们的其他应用程序一起使用,并将执行所有 CRUD 操作。远程数据库不是遗留数据库。

最佳答案

深入挖掘后,我找到了解决方案。 inspectdb 如果只有我们的远程数据库是遗留的,那将是一种解决方法,但事实并非如此。所以,我们已经了解了 DB router再次指导解决了问题。然后我们能够通过根据 doc 直接执行自定义 SQL 将数据从远程数据库传送到我们的 Django 应用程序。 .

我们认为数据库路由器仅适用于您有另一个 Django 应用程序的数据库,您希望在另一个 Django 应用程序中将其数据库用作远程数据库。

关于python - 在 Django 中使用多个数据库,让另一个数据库包含不是由任何模型创建的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56945190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com