MYSQL中有两个带Django的数据库?

时间:2012-12-28 08:40:12

标签: mysql django

我有一个专门用于Django的数据库。我遇到了一个简单的问题。对于登录中的用户身份验证,我需要使用来自另一个数据库(mysql)和表的数据。两个表都在同一台服务器上。我怎样才能做到这一点?感谢

1 个答案:

答案 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"

更新#2

您可以在任何您喜欢的地方设置路由器。您需要做的就是将路由器路径传递到DATABASE_ROUTERS文件中的settings.py变量。为了清洁代码和组织,我通常在我的应用程序文件夹下的单独routers.py文件中执行此操作,然后设置DATABASE_ROUTERS

例如:

DATABASE_ROUTERS = ['myapp.routers.MyRouter',]