这是我的问题,如果您想知道详细信息,请在下面进一步提及(很长的帖子,很抱歉,我希望查询尽可能详细):
问题
是否可以从外部数据库检索数据并在Django项目中使用这些数据,即使该数据库中的表未作为模型创建?如果是这样,实现这种目标的基本概念是什么。
如果不是,那么剩下的解决方法是使用SAME DATABASE作为远程数据库,并将django项目的所有模型保存到该数据库中的特定架构中?
因此,我们试图通过远程数据库Cross-database referencing
强制实施my_remote_db
,该数据库包含不是Django模型创建的表。
我们已经阅读了Django文档,告诉它当前无法处理这种引用方法,但是我们可以在settings.py
中定义多个数据库这一事实使我们对存在某种解决方法感到乐观。
我们的settings.py
中定义的数据库我们要实现的目标:
从远程数据库(其表未创建为model
)中检索数据,并在我们的Django项目中使用这些信息。
示例用法:
假设我们要在Django项目中创建一个模型LeaveRequest
,该模型包含一个名为employee
的字段,该字段的值是从id
的远程数据库中引用的雇员的my_remote_db.my_schema.employees
桌子。
在管理门户中,添加新的请假请求时,我们希望employee
字段是员工的下拉列表。
由于由于没有将远程数据库的表创建为模型而无法使用models.ForeignKey
,因此我们只想通过执行raw来预先填充employee
字段SQL命令并将结果作为choices[('value','text')}
传递,例如employee = models.IntegerField(choices[('1','Leonard Hofstadter'),('2','Sheldon Cooper')]
PS
我们尝试在python shell中运行以下命令,我们将获得
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操作。远程数据库不是旧版数据库。
答案 0 :(得分:0)
您应将外部数据库视为旧数据库。在这种情况下,您必须使用inspectdb
命令来实现该数据库的模型。
路线图是:
连接外部数据库
使用inspectdb
migrate
创建其他django表,例如权限
签出official django docs与之相处。
答案 1 :(得分:0)