将外部 mysql 数据库连接到 django 应用程序并查询它

Posted

技术标签:

【中文标题】将外部 mysql 数据库连接到 django 应用程序并查询它【英文标题】:Connecting an external mysql database to django application and querying it 【发布时间】:2017-11-24 20:32:57 【问题描述】:

我需要将数据从外部 mysql 数据库提取到我的应用程序。我已在 settings.py 文件中将以下几行添加到我的数据库字典中。

'cust': 
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'cust_data',
        'HOST': '',
        'USER': '',
        'PASSWORD': ''
    

引擎名称对吗?我已经添加了所有其他详细信息。

现在是这个吗?我现在如何从这个数据库中获取数据?我可以在我的应用程序views.py 中简单地使用SQL 查询吗?

现在当我使用以下命令进入 shell 时

python manage.py shell

当我对 MySQL 数据库执行查询时,它不起作用。我确定我在这里遗漏了一些东西。

我被困在这里,我在这里做错了什么?如何运行命令来访问上述数据库中特定表中的数据?

【问题讨论】:

【参考方案1】:

您的外部 MySQL 数据库似乎没有映射到您的 Django 模型。在这种情况下,您必须使用 django.db.connection 对象来连接数据库并直接执行原始 SQL 查询。您可以在views.py 中使用查询结果,但最好考虑views.py 是否是执行查询操作的正确位置。

要在 python shell 中测试查询,你可以这样尝试:

>>> from django.db import connections
>>> cursor = connections['cust'].cursor() # Replace 'cust' to other defined databases if necessary.
>>> cursor.execute("YOUR SQL QUERY HERE")
>>> cursor.fetchall()

对于 fetchall() 方法,它应该以元组形式返回您的结果。

您可以参考here官网的更多信息。

【讨论】:

这看起来很完美,所以在配置完我的settings.py之后,我可以直接使用Lee提到的上述代码行吗?还是我需要配置其他东西? 是的。您可以在shell中尝试上面提到的代码(通过命令python manage.py shell进行shell),看看它是否可以从您的数据库中获取结果。如果它返回预期的结果,您可以简单地在 py 文件中使用相同的代码。 好的,谢谢【参考方案2】:

常量变量错误。您必须声明 DATABASES 变量。

在你的 settings.py 中

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydatabase',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'myhost'            
    

只需将占位符替换为正确的值即可。

【讨论】:

我认为您在这里弄错了,我的应用程序使用多个数据库,我已经有一个默认数据库集,这是我的第二个数据库。有关详细文档,请参阅此链接docs.djangoproject.com/en/1.11/topics/db/multi-db

以上是关于将外部 mysql 数据库连接到 django 应用程序并查询它的主要内容,如果未能解决你的问题,请参考以下文章

从 Django 连接到外部 Web 套接字 api

如果 mysql 数据库驻留在 wamp 服务器中,如何将 django 项目连接到 mysql 数据库?

如何使用 Windows 将我的 Django 项目连接到 MySql?

将 Django 连接到 MySQL 错误“您安装了 mysqlclient 吗?”

MySQL 使用 XAMPP 连接到外部数据库

将 Django 与 Docker 一起使用时出错 - “无法连接到 '127.0.0.1' (111) 上的 MySQL 服务器”)