JJD*_*JJD 10 django postgresql postgis geodjango database-schema
在我的GeoDjango项目中,我想连接到传统的PostgreSQL/PostGIS数据库.它包含以下模式:
spatial_ref_sys我希望屏幕截图中显示的Django表进入django模式.我不想污染public架构.
我希望"数据"模型连接到data架构.我已经尝试从遗留表中生成模型,但是python manage.py inspectdb连接到public模式.
为了提供对不同模式的访问,我采用了本文的方法2,该方法将单个search_path值预先分配给特定的数据库用户:
-- user accessing django schema...
CREATE ROLE django_user LOGIN PASSWORD 'secret';
ALTER ROLE django_user SET search_path TO django, public;
-- user accessing data schema...
CREATE ROLE data_user LOGIN PASSWORD 'secret';
ALTER ROLE data_user SET search_path TO data, public;
Run Code Online (Sandbox Code Playgroud)
然后我按如下方式配置了数据库连接:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'multi_schema_db',
'USER': 'django_user',
'PASSWORD': 'secret',
},
'data': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'multi_schema_db',
'USER': 'data_user',
'PASSWORD': 'secret',
},
}
Run Code Online (Sandbox Code Playgroud)
如何django在"数据"模型连接到模式时实际配置Django使用data模式?
你必须利用search_path:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS' : {
'options': '-c search_path=django,public'
},
'NAME': 'multi_schema_db',
'USER': 'django_user',
'PASSWORD': 'secret',
},
'data': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS' : {
'options': '-c search_path=data,public'
},
'NAME': 'multi_schema_db',
'USER': 'data_user',
'PASSWORD': 'secret',
},
}
Run Code Online (Sandbox Code Playgroud)
如果您不需要通过迁移来管理表,则可以对模型的属性使用转义引号db_table:
class SomeModel(models.Model):
field1 = models.AutoField(primary_key=True)
class Meta():
managed=False
db_table=u'"schema\".\"table"'
Run Code Online (Sandbox Code Playgroud)
我们使用Django Tenant Schema取得了巨大成功。它允许您通过将不同的租户描述为架构的所有者来访问不同的架构。
这将允许您在每次调用的基础上设置架构。如果需要基于每个 url 设置架构,您可以在中间件中执行此操作。
| 归档时间: |
|
| 查看次数: |
9864 次 |
| 最近记录: |