向现有django 1.2项目添加第二个遗留数据库

向现有django 1.2项目添加第二个遗留数据库,django,legacy,multiple-databases,Django,Legacy,Multiple Databases,我有一个django项目,我已经使用了一段时间,但现在我想从第二个非django数据库添加一些新的数据集。我已成功配置我的settings.py文件以使用名为“mediawikidb”的新数据库 我可以运行以下命令: python manage.py inspectdb --database=mediawikidb 我得到了django对数据库的模型表示,但我感兴趣的表叫做“User”。inspectdb的输出如下所示: class User(models.Model): user_id =

我有一个django项目,我已经使用了一段时间,但现在我想从第二个非django数据库添加一些新的数据集。我已成功配置我的settings.py文件以使用名为“mediawikidb”的新数据库

我可以运行以下命令:

python manage.py inspectdb --database=mediawikidb
我得到了django对数据库的模型表示,但我感兴趣的表叫做“User”。inspectdb的输出如下所示:

class User(models.Model):
user_id = models.IntegerField(primary_key=True)
user_name = models.CharField(unique=True, max_length=255)
user_real_name = models.CharField(max_length=255)
user_password = models.TextField()
user_newpassword = models.TextField()
user_newpass_time = models.CharField(max_length=14, blank=True)
user_email = models.TextField()
user_options = models.TextField()
user_touched = models.CharField(max_length=14)
user_token = models.CharField(max_length=32)
user_email_authenticated = models.CharField(max_length=14, blank=True)
user_email_token = models.CharField(max_length=32, blank=True)
user_email_token_expires = models.CharField(max_length=14, blank=True)
user_registration = models.CharField(max_length=14, blank=True)
user_editcount = models.IntegerField(null=True, blank=True)
class Meta:
    db_table = u'user'
我一直在阅读文档[0],但我很困惑,所以我想在阅读了一段时间后,我会在这里询问。我不能把这个放在我的模型里,对吗?如果我这样做,肯定会引起django的问题。我该怎么做

我的另一个问题是,django如何知道这个“用户”模型实例与哪个数据库相关?我觉得我错过了什么,但我找不到任何有意义的东西

我应该如何设置我的模型,以便能够访问这些数据,而不会弄乱django中的任何东西


[0]

检查以下文档:

他们有一个路由器的例子,指示从何处读取数据和向何处写入数据。对于您的用户模型,您可以配置与mediawiki数据库的所有交互,所有其他模型都将使用您的普通数据库

只要确保禁用关系

class MyAppRouter(object):

    def _is_user_model(model):
        return str(model.__name__) == 'User' and model._meta.app_label == 'myapp'

    def db_for_read(self, model, **hints):
        if self._is_user_model(model):
            return 'mediawikidb'
        return None

    def db_for_write(self, model, **hints):
        if self._is_user_model(model):
            return 'mediawikidb'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if self._is_user_model(obj1) or self._is_user_model(obj2):
            return False
        return None

    def allow_syncdb(self, db, model):
        if db == 'mediawikidb':
            return False
        elif self._is_user_model(model):
            return False
        return None

我假定您担心表被称为
user
,模型类被称为
user
。Django的表使用
app\u modelname
,因此
Django.contrib.auth
的表是
auth\u user

Django不知道您的用户模型与哪个数据库相关。它将采用默认值,因此它将查找数据库中可能不存在的表
user


要查询它,您需要指定一个特定的数据库(
User.objects.using('mydb').all()
),或者按照Dimitry的建议设置自动数据库路由

它会是一个“db_for_read”吗?我想我不了解路由器是如何工作的。检查新的解决方案(未测试)我应该说我的示例假设您的用户模型驻留在一个名为“myapp”的应用程序中