我的工作场所计划使用Python / Django作为后端框架,并在前端使用React,在ASP classic的oracle db之上。由于我们的oracle数据库是从公司成立之初就开始构建的,因此我们决定保持原样。
据我了解,oracle中的模式通常是通过用户名/密码访问的,因此每个模式都需要具有用户名/密码才能访问,并且我们的oracle数据库具有大约30种模式,每个模式内部都包含许多表。> 另一方面,
Django似乎一次仅支持一个模式(基于settings.py中安装的应用程序),听起来数据库配置需要在settings.py中设置不同的用户/密码。对于已安装的每个应用。
到目前为止,我已经在class Meta
中尝试过DATABASES
和settings.py
;
// class Meta
class SomeModel(models.Model):
///some fields and data types...
class Meta():
managed=False
db_table=u'"schema\".\"table"'
// DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'multi_schema_db',
'USER': 'django_user',
'PASSWORD': 'secret',
},
'data': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'multi_schema_db',
'USER': 'data_user',
'PASSWORD': 'secret',
},
}
我的问题是,在django仅安装了一个应用程序的情况下,是否有任何变通办法可以访问多个架构?
P.S。纠正我在上面的任何误解。
答案 0 :(得分:2)
You can have multiple schemas in Django
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'multi_schema_db_1', # The name is the schema
'USER': 'django_user',
'PASSWORD': 'secret',
},
'data': {
'ENGINE': 'django.db.backends.oracle',
'NAME': 'multi_schema_db_2', # The name is the schema
'USER': 'data_user',
'PASSWORD': 'secret',
},
}
要使用特定的架构,请使用.using()
SomeModel.objects.using('data').all() # The default is to use the "default" database conection
如果某些模型仅处于一种模式,则可以使用routers定义每种模型要使用的数据库
class YourRouter:
def db_for_read(self, model, **hints):
return database_for_the_model
def db_for_write(self, model, **hints):
return database_for_the_model