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

问题描述:

我需要从外部MySQL数据库将数据提取到我的应用程序。我在settings.py文件中将以下几行添加到了我的数据库字典中。将外部mysql数据库连接到django应用程序并进行查询

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

发动机名称正确吗?我已经添加了所有其他细节。

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

现在,当使用以下命令

python manage.py shell 

当我执行一个查询到MySQL数据库我进入外壳,这是行不通的。我相信我在这里失去了一些东西。

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

看起来你的外部MySQL数据库没有映射到你的Django模型。在这种情况下,您必须使用django.db.connection对象来连接数据库并直接执行原始SQL查询。您可以在views.py中使用查询结果,但最好考虑是否view.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查询更多信息。

+0

这看起来很完美,所以一旦配置我的settings.py后,我可以直接使用上面的行如李所提到的代码?或者我需要配置其他的东西? – kohl

+0

是的。你可以在shell中使用上面提到的代码(通过命令'python manage.py shell'使用shell)来查看它是否可以从你的数据库中得到结果。如果它返回了预期的结果,你可以简单地在py文件中使用相同的代码。 –

+0

好的,谢谢 – kohl

常量变量是错误的。你必须声明DATABASES变量。

在你的settings.py

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

只是用正确的值替换占位符。

+0

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