从远程数据库中获取并存储到本地 django
Posted
技术标签:
【中文标题】从远程数据库中获取并存储到本地 django【英文标题】:fetch from remote database and store into local django 【发布时间】:2015-11-07 15:41:34 【问题描述】:有一种情况是我无法在 python 应用程序中预先看到它完成,我想知道这是否可以完成。
场景是这里有一个 Django 服务器(#1)作为客户端,另一个远程服务器有一个数据库(mysql 或 SQL Server)(#2),
#1 应该使用正确的用户名和密码发送请求,#2 应该使用其数据库的 json 转储响应 #1,#2 的服务器应用程序结构是可选的,但首选 Django,请记住我们有几个约束这里:
#2 没有有自己的数据库用户名或密码,应该只使用#1给出的用户名和密码
#2 不知道自己数据库的表结构,但应该能够正确地将其转储为 json
#1 应该能够发送这样的 HttpRequest 并接收 json 文件作为 HttpResponse 并将其保存为对象(或文件)
顺便说一句,python 版本是 3.4,Django 版本是 1.8,(都稳定)
我认为一种方法是在 #2 收到请求后执行 shell 命令,但我对此很困惑(是否可以在 python 中运行 shell 脚本?)
【问题讨论】:
【参考方案1】:您可以在双方开发 2 套 api。使用Django REST framework 或Tastypie,您可以在服务器#2 上创建api 以接受来自客户端#1 的用户名和密码,然后处理转储。正确创建转储后,服务器 #2 将使用客户端 #1 上的 api 发送 json。
由于您通过网络发送 json,我认为您不需要 shell 脚本来获取转储。 Python还擅长系统操作。
【讨论】:
我相信 REST 框架非常有用,我阅读的教程展示了您可以通过不到 30 行代码轻松地通过远程请求进行查询,但是由于我已经在谈论数据库服务器与表和数据一起存在,整个用法被破坏了。 #2 服务器在运行之前不知道数据库表和列,因此除非有一种方法可以在现有表中以编程方式创建模型而无需硬编码用户名和密码,否则 REST 框架将无法工作。否则很好的解决方案,还是我错过了什么? 在 django 中有一种方法可以基于现有数据库创建模型。只需一个命令inspectdb
,您就可以神奇地获得所有模型。 docs.djangoproject.com/en/1.8/howto/legacy-databases。但可能会进行手动验证以确保一切正常。
这个问题似乎已经基本解决了,除了我被困在的第一个角落。在每个 Django 文档中都说 Django 必须知道数据库参数,但在这种情况下,Django 不应该在 #1 将其提供给 #2 之前知道数据库参数,我的意思是,还有一种方法可以延迟数据库连接直到参数设置,还有没有办法从程序内部的python函数而不是Django-admin shell命令执行inspectdb和迁移命令?
我不太了解您创建此应用程序的目的,所以我不太了解您的“数据库参数”和“服务器-客户端”架构之间的关系。人们通常在服务器上创建 api,以便客户端可以调用以获取信息,服务器将拥有所有模型、数据库连接设置等。客户端仅获取数据但通常不保留任何信息。也许它没用,因为你需要别的东西。
我不知道,只是在其他框架中,您可以在程序中使用动态连接字符串连接到数据库服务器,我想知道在 Django 中是否也可以这样做,最初我们认为让数据库服务器像数据库服务器一样工作(即传递用户名和密码并连接到它以查询它并检索数据)因此可能有必要改变结构并让本地服务器知道数据库参数(而不是原来的服务器(#1),用来连接到这个数据库服务器(#2)) 并单独验证原始服务器而不是?以上是关于从远程数据库中获取并存储到本地 django的主要内容,如果未能解决你的问题,请参考以下文章
Postgresql:从本地到远程数据库的存储函数中的 dblink