【发布时间】:2019-07-09 04:05:47
【问题描述】:
这是我的问题,如果您想了解详细信息,请进一步参考以下内容(抱歉,帖子太长,我希望询问尽可能详细):
问题
是否可以从外部数据库中检索数据并在 Django 项目中使用这些数据,即使该数据库中的表不是作为模型创建的?如果是这样,实现这一目标的基本概念是什么。
-
如果不是,那么剩下的解决方法是使用与远程相同的数据库,并将 django 项目的所有模型保存到该数据库中的特定模式中?
所以我们试图用远程数据库my_remote_db 强制实现Cross-database referencing,其中包含不是由 Django 模型创建的表。
我们已阅读 Django 文档,告诉它目前无法处理此类引用方法,但我们可以在 settings.py 中定义多个数据库的事实使我们乐观地认为有某种解决方法。
我们的 settings.py 中定义的数据库
- django_project_db - 主数据库(我们的 Django 项目用于其模型的数据库)
- my_remote_db - 远程数据库。几个应用程序正在使用这个数据库,例如我们的 Scout 和 PHP 应用程序等。
我们想要实现的目标:
从远程数据库(表未创建为model)中检索数据,并在我们的 Django 项目中使用这些信息。
示例用法:
假设我们想在我们的 Django 项目中创建一个模型 LeaveRequest,其中包含一个名为 employee 的字段,其值是从远程数据库 my_remote_db.my_schema.employees 表中引用的员工的 id。
在管理门户中,当添加新的休假请求时,我们希望 employee 字段是员工的下拉列表。
由于无法使用models.ForeignKey,因为远程数据库的表不是作为模型创建的,因此我们只想通过执行原始 SQL 命令预填充employee 字段并传递结果为choices[('value','text')} 例如employee = models.IntegerField(choices[('1','Leonard Hofstadter'),('2','Sheldon Cooper')]
附言
我们尝试在 python shell 中运行以下命令,我们会得到 p>
NotSupportedError:未实现跨数据库引用: “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 操作。远程数据库不是旧数据库。
【问题讨论】:
标签: python django postgresql django-models