郑州网站推广方法,百度学术搜索入口,迪奥网页设计图片,潍坊专业网站建设最新报价一、说明#xff1a; 在开发 Django 项目的时候#xff0c;很多时候都是使用一个数据库#xff0c;即 settings 中只有 default 数据库#xff0c;但是有一些项目确实也需要使用多个数据库#xff0c;这样的项目#xff0c;在数据库配置和使用的时候#xff0c;就比较麻…一、说明 在开发 Django 项目的时候很多时候都是使用一个数据库即 settings 中只有 default 数据库但是有一些项目确实也需要使用多个数据库这样的项目在数据库配置和使用的时候就比较麻烦一点。 二、Django使用多个数据库中settings中的DATABASES的设置 2.1 默认只是用一个数据库时 DATABASES 的设置以 SQLite 为例
DATABASES {default: {ENGINE: django.db.backends.sqlite3, NAME: db.sqlite3,}
} 2.2 Django 数据库支持的 ENGINE 类型 django.db.backends.postgresqldjango.db.backends.mysqldjango.db.backends.sqlite3django.db.backends.oracle 2.3 设置了多个数据库后 settings 中的 DATABASES 的设置 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: db.sqlite3,},db1: {ENGINE: django.db.backends.mysql,NAME: mysql_test_db1,USER: root,PASSWORD: Se7eN521,HOST: 127.0.0.1,PORT: 3306},db2: {ENGINE: django.db.backends.mysql,NAME: mysql_test_db2,USER: root,PASSWORD: Se7eN521,HOST: 127.0.0.1,PORT: 3306}
} 三、实现思路
多个应用对应多个数据库和一个应用对应多个数据库 情况一项目有多个 应用app 且需要使用到多个数据库情况二项目只有一个应用app, 且但需要使用到多个数据库这两种情况的实现思路其实都是一样的都是为每个数据库创建一个应用即这个应用只对接一个数据库如果这个应用不需要写任何业务逻辑的代码也需要创建一个空的应用主要是用来做数据库迁移的核心思想就是一个model类对应一个数据库通过数据库路由和model定义时指定的all_label来实现。 四、案例实现 第一步创建需要的 应用app,并且在 INSTALLED_APPS 中引用 其中db1_app这个应用主要是用来对接数据库db1的 其中db2_app这个应用主要是用来对接数据库db2的 其中test_app这个应用主要用来实现业务逻辑的 第二步创建 应用app 和 数据库之间的映射关系 在settings.py 文件夹中设置 DATABASE_APPS_MAPPING 的字典里面主要是配置 应用app 和数据库的对应关系
DATABASE_APPS_MAPPING {db1_app: db1, # db1_app 对应 db1 数据库db2_app: db2 # db2_app 对应 db2 数据库
} 第三步创建数据库路由 在项目的主文件夹即 settings.py 的同目录下创建一个 database_router.py 文件该文件的作用就是给不同应用app 配置不同的数据库。 # _*_ coding:utf-8 _*_
# Time : 2023/4/20 5:37 下午from django.conf import settingsDATABASE_MAPPING settings.DATABASE_APPS_MAPPING
print(DATABASE_MAPPING {}.format(DATABASE_MAPPING))class DatabaseAppsRouter(object):# 设置 应用app 读取时数据库的设置def db_for_read(self, model, **hints)if model._meta.app_label in DATABASE_MAPPING:return DATABASE_MAPPING[model._meta.app_label]return Nonedef db_for_write(self, model, **hints):if model._meta.app_label in DATABASE_MAPPING:return DATABASE_MAPPING[model._meta.app_label]return Nonedef allow_relation(self, obj1, obj2, **hints):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 Trueelse:return Falsereturn Nonedef allow_migrate(self, db, app_label, model_nameNone, **hints):Make sure that apps only appear in the related database.根据app_label的值只在相应的数据库中创建一个表如果删除该def或不指定过滤条件则一个Model会在每个数据库里都创建一个表。if db in DATABASE_MAPPING.values():return DATABASE_MAPPING.get(app_label) dbelif app_label in DATABASE_MAPPING:return Falsereturn None 第四步在setting.py中配置 DATABASE_ROUTERS 指定自由路由文件
#test_django为项目名database_router为路由文件名DatabaseAppsRouter为路由中创建的类名
DATABASE_ROUTERS [django_db_demo.database_router.DatabaseAppsRouter] 第五步创建model类 说明model 可以根据需要卸载任何一个应用app的model.py文件中也可以分散写在多个应用的model.py中这个根据自己的需要即可但是如何推荐一定要在model类的Meta中指定app_label。不然会全部将表创建到default数据库中 from django.db import modelsclass SqliteModel(models.Model):帐号和用户关联sqlite_name models.CharField(max_length20)class Meta:# 当前这个 SqliteModel 定义的数据库的表将会创建在test_app 对应的default 数据库中app_label test_app # 当有多个数据库链接的时候要通过app_label 来区分这个model对应那个数据库class Db1Model(models.Model):帐号和用户关联db1_name models.CharField(max_length20)class Meta:# 当前这个Db1Model 定义的数据库的表将会创建在 db1_app 对应的 db1 数据库中app_label db1_app # 当有多个数据库链接的时候要通过app_label 来区分这个model对应那个数据库class Db2Model(models.Model):帐号和用户关联db2_name models.CharField(max_length20)class Meta:# 当前这个Db2Model 定义的数据库的表将会创建在 db2_app 对应的 db1 数据库中app_label db2_app # 当有多个数据库链接的时候要通过app_label 来区分这个model对应那个数据库 第六步数据迁移
python3 manage.py makemigrations
python3 manage.py migrate --databasedefault # 当有多个数据库需要迁移多次
python3 manage.py migrate --databasedb1
python3 manage.py migrate --databasedb2 第七步查看迁移 model对应的表分别迁移到不同的数据库成功剩下的增删改查的就正常引入model对象即可这样就实现了不同的model对象对应不用数据库的表。 第五步总结
创建多个数据库连接设置创建多个数据与应用app的映射关系创建数据库路由创建model类的时候置指明app_label即这个model是属于那个app,从而觉得迁移到那个数据库 文章转载自: http://www.morning.njstzsh.com.gov.cn.njstzsh.com http://www.morning.wrtbx.cn.gov.cn.wrtbx.cn http://www.morning.dwwlg.cn.gov.cn.dwwlg.cn http://www.morning.frqtc.cn.gov.cn.frqtc.cn http://www.morning.ohmyjiu.com.gov.cn.ohmyjiu.com http://www.morning.pjfmq.cn.gov.cn.pjfmq.cn http://www.morning.mytmn.cn.gov.cn.mytmn.cn http://www.morning.hbywj.cn.gov.cn.hbywj.cn http://www.morning.blxor.com.gov.cn.blxor.com http://www.morning.tkfnp.cn.gov.cn.tkfnp.cn http://www.morning.dwgcx.cn.gov.cn.dwgcx.cn http://www.morning.gkgr.cn.gov.cn.gkgr.cn http://www.morning.qbtj.cn.gov.cn.qbtj.cn http://www.morning.rnsjp.cn.gov.cn.rnsjp.cn http://www.morning.wtcd.cn.gov.cn.wtcd.cn http://www.morning.srbfp.cn.gov.cn.srbfp.cn http://www.morning.hxwrs.cn.gov.cn.hxwrs.cn http://www.morning.rkck.cn.gov.cn.rkck.cn http://www.morning.qqzdr.cn.gov.cn.qqzdr.cn http://www.morning.zlgr.cn.gov.cn.zlgr.cn http://www.morning.gfprf.cn.gov.cn.gfprf.cn http://www.morning.kfhm.cn.gov.cn.kfhm.cn http://www.morning.hmgqy.cn.gov.cn.hmgqy.cn http://www.morning.ffbp.cn.gov.cn.ffbp.cn http://www.morning.rnzbr.cn.gov.cn.rnzbr.cn http://www.morning.jqbmj.cn.gov.cn.jqbmj.cn http://www.morning.mkzdp.cn.gov.cn.mkzdp.cn http://www.morning.lffbz.cn.gov.cn.lffbz.cn http://www.morning.hphrz.cn.gov.cn.hphrz.cn http://www.morning.rknjx.cn.gov.cn.rknjx.cn http://www.morning.qqnh.cn.gov.cn.qqnh.cn http://www.morning.mngyb.cn.gov.cn.mngyb.cn http://www.morning.tjndb.cn.gov.cn.tjndb.cn http://www.morning.mwkwg.cn.gov.cn.mwkwg.cn http://www.morning.zybdj.cn.gov.cn.zybdj.cn http://www.morning.rzmzm.cn.gov.cn.rzmzm.cn http://www.morning.tntqr.cn.gov.cn.tntqr.cn http://www.morning.qmzwl.cn.gov.cn.qmzwl.cn http://www.morning.rksnk.cn.gov.cn.rksnk.cn http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn http://www.morning.njftk.cn.gov.cn.njftk.cn http://www.morning.ylljn.cn.gov.cn.ylljn.cn http://www.morning.rkfgx.cn.gov.cn.rkfgx.cn http://www.morning.mdmc.cn.gov.cn.mdmc.cn http://www.morning.cbpmq.cn.gov.cn.cbpmq.cn http://www.morning.qgbfx.cn.gov.cn.qgbfx.cn http://www.morning.rxlk.cn.gov.cn.rxlk.cn http://www.morning.fdhwh.cn.gov.cn.fdhwh.cn http://www.morning.jbtlf.cn.gov.cn.jbtlf.cn http://www.morning.gcbhh.cn.gov.cn.gcbhh.cn http://www.morning.cwjxg.cn.gov.cn.cwjxg.cn http://www.morning.mjbjq.cn.gov.cn.mjbjq.cn http://www.morning.sjpbh.cn.gov.cn.sjpbh.cn http://www.morning.deanzhu.com.gov.cn.deanzhu.com http://www.morning.stmkm.cn.gov.cn.stmkm.cn http://www.morning.24vy.com.gov.cn.24vy.com http://www.morning.nqwz.cn.gov.cn.nqwz.cn http://www.morning.mczjq.cn.gov.cn.mczjq.cn http://www.morning.qbtkg.cn.gov.cn.qbtkg.cn http://www.morning.gxhqt.cn.gov.cn.gxhqt.cn http://www.morning.xqffq.cn.gov.cn.xqffq.cn http://www.morning.cwpny.cn.gov.cn.cwpny.cn http://www.morning.zknjy.cn.gov.cn.zknjy.cn http://www.morning.prgyd.cn.gov.cn.prgyd.cn http://www.morning.mkhwx.cn.gov.cn.mkhwx.cn http://www.morning.hcxhz.cn.gov.cn.hcxhz.cn http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn http://www.morning.cpnlq.cn.gov.cn.cpnlq.cn http://www.morning.wnhml.cn.gov.cn.wnhml.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn http://www.morning.nrfqd.cn.gov.cn.nrfqd.cn http://www.morning.xrnh.cn.gov.cn.xrnh.cn http://www.morning.lqynj.cn.gov.cn.lqynj.cn http://www.morning.wnnfh.cn.gov.cn.wnnfh.cn http://www.morning.rwfj.cn.gov.cn.rwfj.cn http://www.morning.mxnhq.cn.gov.cn.mxnhq.cn http://www.morning.xqcst.cn.gov.cn.xqcst.cn http://www.morning.flqkp.cn.gov.cn.flqkp.cn http://www.morning.qcdhg.cn.gov.cn.qcdhg.cn