我有一个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] http://docs.djangoproject.com/en/dev/topics/db/multi-db/
答案 0 :(得分:2)
我认为你担心被称为user
的表,而模型类被称为User
。 Django对其表使用app_modelname
,因此django.contrib.auth
的表为auth_user
Django不知道您的用户模型与哪个数据库相关。它将采用默认值,因此它将查找可能在您的数据库中不存在的表user
。
要查询它,您需要指定一个特定的数据库(User.objects.using('mydb').all()
)或设置Dimitry建议的自动数据库路由。
答案 1 :(得分:1)
检查以下文档:
http://docs.djangoproject.com/en/dev/topics/db/multi-db/#an-example
他们有一个路由器示例,指示从哪里读取数据和向其写入数据。对于您的用户模型,您可以配置与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