2013-01-08 55 views
-1

我在我的用户配置文件中有一个字段来定义数据库名称,用户可以连接。如何在运行时更改django中的数据库

像这样:

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中使用的数据库的名字在我的用户配置预配置?

感谢

+0

'request.user.DBNAME'使用多个数据库?我不确定我是否理解这个问题。 – wegenerd

+0

我会尽力解释更好..我在我的用户配置文件中有一个名为DBNAME的字段...每个用户都将连接到不同的数据库...我有很多模型..当我得到我的视图时,我从用户配置文件并从该数据库获取数据......但我不知道是否可能。 –

回答

4

在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_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 here

+0

好的,但我在哪里使用using()函数?在这些例子中,我有包含所有用户的“app_data”,并且对于每个数据库,我在DATABASES中创建一个DBNAME? –

+0

如果DBName是您希望连接的不同数据库的名称,那么每个数据库都需要在settings.py文件中定义 – Crazyshezy

+0

好了,我知道..但我尝试将Auth.object ...放入我的设置,但没有工作..我把这些代码? –

相关问题