我有一个专门用于Django的数据库。我遇到了一个简单的问题。对于登录中的用户身份验证,我需要使用来自另一个数据库(mysql)和表的数据。两个表都在同一台服务器上。我怎样才能做到这一点?感谢
答案 0 :(得分:0)
您需要在settings.py
中定义两个数据库。您应该阅读设置multiple databases documentation。它很直接。配置和同步数据库后,可以手动为QuerySet
选择数据库,如下所示:
Model.objects.using('database').all()
要为模型指定连接,您可以按如下方式定义Router
。
from django.db import connections
class MyRouter(object):
"""
This router object will take care of the database
operations for models.
"""
def db_for_read(self, model, **hints):
if hasattr(model,'connection_name'):
return model.connection_name
return None
def db_for_write(self, model, **hints):
if hasattr(model,'connection_name'):
return model.connection_name
return None
def allow_syncdb(self, db, model):
if hasattr(model,'connection_name'):
return model.connection_name == db
return db == default
然后对于models.py中的模型,您可以执行以下操作:
class MyModel(models.Model):
connection_name="filename"
您可以在任何您喜欢的地方设置路由器。您需要做的就是将路由器路径传递到DATABASE_ROUTERS
文件中的settings.py
变量。为了清洁代码和组织,我通常在我的应用程序文件夹下的单独routers.py
文件中执行此操作,然后设置DATABASE_ROUTERS
DATABASE_ROUTERS = ['myapp.routers.MyRouter',]