1

我在我的用户配置文件中有一个字段来定义数据库名称,该用户可以连接。

像这样:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    dbname = models.CharField(u'Database name', max_length=100, null=True, blank=True)

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

如何设置 - 在运行时 - django 以使用我的 UserProfile 中预先配置的数据库名称?

谢谢

4

1 回答 1

6

在 Django 中,您可以在 settings.py 文件中定义多个这样的数据库

DATABASES = {
    'app_data': {
        'NAME': 'app_data',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'postgres_user',
        'PASSWORD': 's3krit'
    },
    'DBNAME_1': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'priv4te'
    }
}

现在考虑 app_data 是您存储所有用户的位置,并且您希望 user=User_1 然后连接到 User_1 的数据库。使用该using()功能按名称选择您的数据库连接

>>> user = Auth.objects.using('app_data').get(user=user)
>>> print user.database
DBNAME_0
>>>Data = SomeTable.objects.using(user.database).all()

在此处阅读有关如何在 Django 中使用多个数据库的更多信息

于 2013-01-08T17:38:51.417 回答