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 中预先配置的数据库名称?
谢谢
在 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 中使用多个数据库的更多信息