如何在运行时更改 django 中的数据库

fh_*_*ash 1 python database django login

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

像这样:

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)
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Cra*_*ezy 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'
    }
}
Run Code Online (Sandbox Code Playgroud)

现在考虑 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()
Run Code Online (Sandbox Code Playgroud)

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