栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django——多个数据库

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django——多个数据库

def db_for_read(self, model, **hints): Point all read operations to the specific database. 将所有读操作指向特定的数据库。 if model._meta.app_label in DATAbase_MAPPING: return DATAbase_MAPPING[model._meta.app_label] return None def db_for_write(self, model, **hints): Point all write operations to the specific database. 将所有写操作指向特定的数据库。 if model._meta.app_label in DATAbase_MAPPING: return DATAbase_MAPPING[model._meta.app_label] return None def allow_relation(self, obj1, obj2, **hints): Allow any relation between apps that use the same database. 允许使用相同数据库的应用程序之间的任何关系 db_obj1 DATAbase_MAPPING.get(obj1._meta.app_label) db_obj2 DATAbase_MAPPING.get(obj2._meta.app_label) if db_obj1 and db_obj2: if db_obj1 db_obj2: return True else: return False else: return None def allow_syncdb(self, db, model): Make sure that apps only appear in the related database. 确保这些应用程序只出现在相关的数据库中。 if db in DATAbase_MAPPING.values(): return DATAbase_MAPPING.get(model._meta.app_label) db elif model._meta.app_label in DATAbase_MAPPING: return False return None def allow_migrate(self, db, app_label, model None, **hints): Make sure the auth app only appears in the auth_db database. 确保身份验证应用程序只出现在“authdb”数据库中。 if db in DATAbase_MAPPING.values(): return DATAbase_MAPPING.get(app_label) db elif app_label in DATAbase_MAPPING: return False return None 4.2.2 settings.py 配置

在 setting.py 中配置 DATAbase_ROUTERS 指定自由路由文件

# 数据库设置, xxxx0001为项目名称
DATAbase_ROUTERS [ xxxx0001.db_router.database_router ]

在 setting.py 中 DATAbase_ROUTERS 下面设置app与数据库匹配路由表 采用字典方式app名对应数据库映射名

DATAbase_APPS_MAPPING {
 app01 : default ,
 app02 : db2 ,
4.2.3 生成表并同步数据

分别在app01和app02下创建model类 用于生成数据表:

此处只定义了 app02 的模型 注意 加上app_label以后就会指明所属的app

from django.db import models
class IntelligentTableView(models.Model):
 table_name models.CharField(max_length 255, verbose_name 报表名称 )
 center models.CharField(max_length 50, verbose_name 所属中心 )
 on_line models.CharField(max_length 50, verbose_name 所属线条 )
 remake models.CharField(max_length 255, verbose_name 备注 )
 create_name models.CharField(max_length 50, verbose_name 创建人 )
 create_date models.DateTimeField(auto_now True, verbose_name 创建时间 )
 is_del models.BooleanField(default False, verbose_name 是否删除 )
 class meta:
 db_table intelligent_table # 表名
 verbose_name 智能报表 
 app_label app02 # 指明app名称 用来对应app 和 数据库的map表

migrate管理命令一次只能操作一个数据库 默认操作default数据库 使用–database指定同步的数据库

python manage.py migrate # 生成表数据同步
python manage.py makemigrations # # 生成迁移文件
python manage.py migrate --database default # 同步指定数据库
python manage.py migrate --database db2
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/266898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号