2017-01-30 87 views
0

因此,例如,以下是在我的settings.py文件中设置的数据库。Django MySQL在不同的数据库上

DATABASES = { 
    'default': { 
     'NAME': 'app_data', 
     'ENGINE': 'django.db.backends.postgresql', 
     'USER': 'postgres_user', 
     'PASSWORD': 's3krit' 
    }, 
    'my_blog': { 
     'NAME': 'my_blog', 
     'ENGINE': 'django.db.backends.mysql', 
     'HOST': '192.168.1.40', 
     'USER': 'mysql_user', 
     'PASSWORD': 'priv4te' 
    } 
} 

我需要从my_blog数据库中获取一些信息。 我没有写入这个数据库的权限,我只需要执行简单的select查询。 你如何建议我这样做?

回答

0

当你使用多个数据库时,你需要做的是为你正在做的查询改变数据库路由规则。

您可以在这里阅读更多。 https://docs.djangoproject.com/en/1.10/topics/db/multi-db/

class MyBlogRouter(object): 
    """ 
    A router to control all database operations on models in the 
    auth application. 
    """ 
    def db_for_read(self, model, **hints): 
     """ 
     Attempts to read blog models go to my_blog. 
     """ 
     if model._meta.app_label == 'my_blog': 
      return 'my_blog' 
     return None 

而在你的settings.py

DATABASE_ROUTERS = ['path.to.MyBlogRouter',] 
+0

,我应该怎么写我的模型,例如? – Erika

+0

模型及其字段应包含从数据库结构中拾取的模式结构。一旦你完成了。你需要为它创建一个虚假的迁移。以便为您的Django应用程序生成适当的内容类型。然后上面应该做到这一点。正确测试。 –

+0

是的,我得到它正常工作。 – Erika

0

请在数据获取的实现做以下。

from django.db import connections 

cursor = connections['my_blog'].cursor() 
cursor.execute('yourquery') 
data = cursor.fetchall() # fetches all rows 
data = cursor.fetchone() # fetches one row 
+0

谢谢,这个也可以。仍然试图找到最好的方式。 – Erika

+0

这对于我应该使用复杂的连接查询时会有所帮助,我想。 – Erika

+0

当你说,你没有对数据库的写入权限意味着你不打算在该数据库上使用django模型创建表。另外,我不会建议编写一个数据库路由器,因为您只会将它用于SELECT查询。你可以做的是在你的Django项目中编写一个Global方法,它将连接到my_blog数据库并返回查询数据。你有相应的数据库表的Django模型?如果是的话,那么你可以写一个路由器。 – shashankqv