postgresql模式在Django业务中的应用
如果实际业务中有第三方业务或者与第三方系统对接,如果涉及到数据库对接,数据库显示一个,使用一样。用户,如何在逻辑中区分第三方数据和自己的数据。
postgresql模式
是postgresql提供的一种特殊的数据库结构,可以将同一个数据库中的数据进行逻辑分离,实现更方便的管理。
postgresql所有没有明确定义schema的数据,默认的schema是通用的,即select *from a
也可以写成❀ 在Schema中可以包括表、视图、索引、存储过程等
模式的优点:
- 允许多个用户使用一个数据库,互不干扰。
- 将数据库对象组织成逻辑组以便于管理。
- 第三方应用程序对象可以放置在单独的架构中,以避免与其他对象名称发生冲突。
如何使用
查看所有架构
\dn
Shell2行,8个字 方案 test_schema; Shell 2行,31个字创建表 tabel_schema.Dog (
ID INTON NATLL,
注意,两个地方。 由于pgbouncer不支持 #settings.py 或者您可以使用‾sche路由器来选择正确的django db sschema。 py 在读写Djangclass TestRouter(object)指定的数据库时实现 Name Varchar (20) Not null,主键(ID); Shell6 行,126 个字
查询
从狗中选择*;
错误:选择♿♿不存在*LINE♿♿*不存在从test_schema.dog中选择*;
id |名称
---- +- -----
(0行)
Shell12行,189个字‾空架构,只需删除架构test_schema .为空,必须删除同时包含所有对象。
drop schema test_schema;
错误:无法删除schema test_schema,因为另一个对象依赖于它
详细信息:表test_schema.dog依赖于schema test_schema也依赖于CA对象。
drop schema test_schema CASCADE;
Shell8行,278字在django中使用模式❀不使用p❀使用pgboucer作为数据库连接池时,直接在配置数据库链接参数即可
django
的settings.py
。 数据库= {
'默认':{
'引擎':'django.db.backends.postgresql_psycopg2',
'选项':{'选项':_path = test_schema ,公共'
},
'NAME': 'db_name',
'USER': '用户名',
'SASWORD': ♸♸, }
Python13行, 350字search_path
中模式的顺序是查找表的顺序。如果该表属于第一个及后续模式,则选择第一个,查询结果将是第一个模式中的表的结果。当sync_db
时,如果先设置search_path–,那么–将默认设置为第一个模式
, 而不是 那么有一个常见默认值
。 使用pgboucer
search_path
参数,无法使用多模式。但如果pgbouncer只访问标准模式的表,可以指定多个数据库链接,让pgbouncer访问标准模式表,其他访问其他链接表,然后重写该模型的对象方法,实现多模式支持。 。本数据库仅支持标准模式下的业务pgbouncer处理,标准业务不访问其他模式。数据库 = {
'默认':{
'引擎':'django.db.backends.postgresql',
'默认':{
' ENGINE': 'django.db.backends.postgresql2', db_NAME ,
'USER': '用户名',
'SASWORD': '密码',
},
'test_db': {
'引擎':'dq.psyglgs':'dq.psygsl'。 ,
'选项': {
'选项': '-c search_path=test_schema'
},
'名称': '数据库名称','♸ W '密码': '密码',
},
}
# Models.py
类 testdbmgr (Models.manager):
DEF GET_LF (GET_LF) super (TestDbMgr, self).get_query_set().using( "test_db")
Python29行,754个字数据库 = {
'默认':{
'引擎':'django.db.backends.postgresql_psycopg2',
'名称':'SERNAME':'SER_NAME'用户' ,
'密码':'密码',
},
'test_db':{
'引擎':'django.db.ql_psy.选项 ': {
'选项': '-c search_path=test_schema'
},
'NAME':'db_name',
'USER':'用户名',
'SASWORD':'密码',
},
}
}=TbDuterS。
Python23行,627字
TestRouter♾:
def db_for_read( 自身 , 模型 , * *提示):
if hasattr(model, '_db_router'):
return model._db_router
return 'default'
def db_for_write(self), ** ;
类狗(模型.模型):
_db_router = 'test_db'
name = model.CharField(max_length=25)
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。