博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在django项目中使用多个数据库
阅读量:2054 次
发布时间:2019-04-28

本文共 2313 字,大约阅读时间需要 7 分钟。

一.在settings.py添加数据库

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'djangoweb', # 数据库名,先前创建的 'USER': 'root', # 用户名,可以自己创建用户 'PASSWORD': '', # 密码 'HOST': '127.0.0.1', # mysql服务所在的主机ip 'PORT': '3306', # mysql服务端口 }, 'zhongwen1': {
'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'zhongwen1.sqlite3'), }}

二.与 settings.py 文件一级创建 database_router.py 文件:

#!/usr/bin/env python# coding:utf8from django.conf import settingsDATABASE_MAPPING = settings.DATABASE_APPS_MAPPING  # 在setting中定义的路由表class DatabaseAppsRouter(object):    def db_for_read(self, model, **hints):        if model._meta.app_label in DATABASE_MAPPING:            return DATABASE_MAPPING[model._meta.app_label]        return None    def db_for_write(self, model, **hints):        if model._meta.app_label in DATABASE_MAPPING:            return DATABASE_MAPPING[model._meta.app_label]        return None    def 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 True            else:                return False        return None    def allow_syncdb(self, db, model):        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_name=None, **hints):        if db in DATABASE_MAPPING.values():            return DATABASE_MAPPING.get(app_label) == db        elif app_label in DATABASE_MAPPING:            return False        return None

三.在 settings.py 中设置数据库的路由规则方法

DATABASE_ROUTERS = ['PrjectName.database_router.DatabaseAppsRouter']

四.在 settings.py 中设置APP对应的数据库路由表

DATABASE_APPS_MAPPING = {

‘zhongwen1’: ‘zhongwen1’,
}

五.创建App model.py 指定数据库

class Meta:        app_label = "zhongwen1"

六.生成数据库

在使用django的 migrate 创建生成表的时候,需要加上 –database 参数,

如果不加则将 未 指定 app_label 的 APP的models中的表创建到default指定的数据库中

python manage.py makemigrationspython manage.py migrate --database=zhongwen1

七.查询

models.User.objects.using(dbname).all()

转载地址:http://wwclf.baihongyu.com/

你可能感兴趣的文章
Contour 学习笔记(一):使用 Contour 接管 Kubernetes 的南北流量
查看>>
Contour 学习笔记(二):使用级联功能实现蓝绿部署和金丝雀发布
查看>>
Kubectl 的替代品:kubeman
查看>>
以后别人再问你什么是 Istio,就把这篇文章甩给他
查看>>
新书推荐 |《Prometheus监控实战》
查看>>
Tekton Pipeline 教程
查看>>
Istio 1.3 发布,HTTP 遥测不再需要 Mixer
查看>>
Kubernetes Dashboard 终结者:KubeSphere
查看>>
AdGuard Home 安装使用教程
查看>>
Porter:面向裸金属环境的 Kubernetes 开源负载均衡器
查看>>
Kubernetes Dashboard 终结者:KubeSphere
查看>>
手把手教你部署 Istio 1.3
查看>>
CentOS 8 都发布了,你还不会用 nftables?
查看>>
一点也不流氓的搜狗输入法皮肤
查看>>
Grafana 6.4 正式发布!
查看>>
etcd 性能测试与调优
查看>>
Docker 大势已去,Podman 万岁
查看>>
Podman 使用指南
查看>>
国内 2018 年 12 月 XX 站访问百强榜单
查看>>
Linux Capabilities 入门教程:概念篇
查看>>