【问题标题】:Handling Local and Remote DB in Django在 Django 中处理本地和远程数据库
【发布时间】:2010-09-26 01:45:04
【问题描述】:

我正在使用 Django 和 MySQL 为网站提供服务。我在 localhost 上为我的站点有自己的 MySQL 服务器。现在我有一个第三方 MySQL 数据库,我需要使用它来读取和写入远程主机上的数据库。我在我的 settings.py 文件中设置了新数据库的信息,但是当我尝试访问远程数据库时出现问题。因为新数据库不是由我创建的,所以我在 models.py 文件中没有相应的类。从中读取 Model.objects.using('remote_db_name').get(pk=0) 的常规方式不起作用,因为它会引发 NameError。

我想知道在 Django 中处理本地和远程数据库的正确方法是什么,尤其是当远程数据库只为您提供 SELECT 和 INSERT 权限时。我在网上找到的所有教程都是关于在同一个 Django 站点中定义的多个数据库,所以 models.py 文件包含了所有需要的数据。

提前感谢您的帮助!

【问题讨论】:

    标签: mysql database django


    【解决方案1】:

    你有两个选择:

    1. 使用 Django 的 legacy database support 为现有数据库自动生成模型。

    2. 跳过 Django ORM,使用原始 SQL 对数据库执行 SQL 语句。

    【讨论】:

    • 感谢您的回复。但是,如果我选择跳过 Django ORM 并使用原始 SQL,我仍然需要在我的 models.py 文件中使用远程数据库的类,不是吗?我需要执行 Model.objects.raw(...),它仍然需要类。还是您的意思是在 Django 之外使用原始 SQL?如果是这样,最好的方法是什么?
    • 从 django.db 导入连接; c = connection.cursor(); c.执行(SQL)
    • 即使远程数据库没有使用 Django,这也能工作吗?特别是,我尝试连接的数据库正在使用 PHP。谢谢。
    • PS:我尝试了connection.cursor(),但是似乎服务器无法连接到远程数据库,并且在漫长的等待之后,它显示了500错误页面。有没有办法检查连接状态,是权限被拒绝还是主机错误?哦,我需要什么样的访问权限才能让 Django 访问远程 MySQL 数据库?现在我只有具有 SELECT 和 INSERT 权限的 MySQL 访问权限。我还需要 SSH 权限吗?谢谢!
    • 您说“数据库正在使用 PHP”和“它显示 500 错误页面”。听起来您在谈论 Web 服务器,而不是 db 服务器。
    【解决方案2】:

    在使用 Django 的旧版支持时,我遇到了很多困难的时刻 - Django 并非严格设计为支持旧版数据库。当然有一些工具/方法(就像上面提到的 Ned),但我宁愿推荐 SQLAlchemy 作为你的替代品。它的速度非常快,旨在支持任何类型的数据库,无论它们是通过 sqlalchemy 创建的还是旧版数据库。

    当然,如果您需要所有其他 Django 元素,请使用 Ned 的解决方案,但请记住,您必须在这个遗留数据库中创建 django 核心表,因此您需要 CREATE 权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 2011-07-27
      • 2017-06-09
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多