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

标签 python django postgresql django-models

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

问题

  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/

相关文章:

python - 如何正确添加wsgi的路径?

python - MFnMesh allIntersections 返回错误结果

python - django 没有反向匹配错误,但我有可选的 View 参数

sql - 如何列出用户可用的所有任务?

python - 二元 Keras LSTM 模型不输出二元预测

python - Django - 包含模板继承

python - redis.exceptions.ConnectionError 在 celery 运行大约一天后

postgresql - Postgres 函数 now() 返回不正确的时区偏移

postgresql - 无法启动用 docker-compose 编写的 kong 服务

python 、 Pandas : Boolean Indexing Comparing DateTimeIndex to Period