Django中一个项目使用多个数据库(原生sql 的使用,亲测)
在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接。
参考:http://blog.csdn.net/songfreeman/article/details/70229839
1. 修改项目的 settings 配置
在 settings.py
中配置需要连接的多个数据库连接串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
2. 设置数据库的路由规则方法
在 settings.py
中配置 DATABASE_ROUTERS
1 |
|
Project: 建立的django项目名称(project_name)
database_router: 定义路由规则database_router.py
文件名称, 这个文件名可以自己定义
DatabaseAppsRouter: 路由规则的类名称,这个类是在database_router.py
文件中定义
3. 设置APP对应的数据库路由表
每个APP要连接哪个数据库,需要在做匹配设置,在 settings.py
文件中做如下配置:
1 2 3 4 5 6 7 |
|
以上的report, regs是项目中的 APP名,分别指定到 ora1, default的数据库。
为了使django自己的表也创建到你自己定义的数据库中,你可以指定 : admin, auth, contenttypes, sessions 到设定的数据库中,如果不指定则会自动创建到默认(default)的数据库中.
4. 创建数据库路由规则
在项目工程根路径下(与 settings.py 文件一级)创建 database_router.py
文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
5.原生sql 的使用:
1 2 3 4 5 6 |
|
参考:https://docs.djangoproject.com/en/2.0/topics/db/sql/
6. Models创建样例
在各自的 APP 中创建数据表的models时,必须要指定表的 app_label 名字,如果不指定则会创建到 default
中配置的数据库名下,
如下:
在app01
下创建models
1 2 3 4 5 6 7 8 9 |
|
在app02
下创建models
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
7. 生成数据表
在使用django的 migrate 创建生成表的时候,需要加上 –database 参数,如果不加则将 未 指定 app_label 的 APP的models中的表创建到default指定的数据库中,如:
将app01下models中的表创建到db01的数据库”db_01”中
./ manage.py migrate --database=db01
将app02下models中的表创建到db02的数据库”db_02”中
./ manage.py migrate --database=db02
将app03下models中的表创建到default的数据库”sqlite3”中
./ manage.py migrate
以上创建完成后,其它所有的创建、查询、删除等操作就和普通一样操作就可以了,无需再使用类似
models.User.objects.using(dbname).all()
这样的方式来操作
来源:https://www.cnblogs.com/fu-yong/p/9889423.html
Django中一个项目使用多个数据库(原生sql 的使用,亲测)相关推荐
- django新建一个项目_如何使用Django创建项目
django新建一个项目 Now that we know how to create virtual environments and use pip, we can begin building ...
- Windows下在Django中创建项目时ImportError: No module named django.core解决方法
Windows下在Django中创建项目时ImportError: No module named django.core解决方法 今天在对照<Python编程:从入门到实践>学## 标题 ...
- 一个项目涉及到的50个Sql语句(整理版)
/* 标题:一个项目涉及到的50个Sql语句(整理版) 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:2010-05-10 地点:重庆航天职业学院 说明:以下五十个语句都按照测试数据进行 ...
- 一个项目涉及到的50个Sql语句
一个项目涉及到的50个Sql语句 /* 标题:一个项目涉及到的50个Sql语句(整理版) 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:2010-05-10 地点:重庆航天职业学院 说明 ...
- Spoon/Kettle 连接sqlserver数据库遇到的问题 (亲测可用,图文讲解)
本文涉及到的错误: Spoon/Kettle 连接sqlserver数据库遇到的问题 (亲测可用,图文讲解) [IM002][Microsoft][ODBC 驱动程序管理器]未发现数据源名称并且未指定 ...
- [亲测有效]visual studio中一个项目C++只允许有一个main方法怎么处理?
因为javaJVM运行机制的原因,在程序设计竞赛的时候用起来总是超时,带来了很多困扰,导致我不得不开始使用C++进行编程. 在使用C++的时候,我在一个工程中的两个CPP文件因为创建了两个main方法 ...
- django中一个简单的迁移报错
django中迁移报 django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you instal ...
- IDEA中一个项目如何导入另一个依赖的项目?
未引入另一个依赖之前: 可以明显得看到这个项目是无法使用另一个项目得东西的 点击File–>Project Structure–>Modules 可以看到这里只有一个zup(此项目的项目名 ...
- 关于路由器再接一个路由器(无线的也OK)方法【亲测可用】
我的情况:一个猫接入第一个路由器(其实猫就是起调制解调的作用,所以如果你是光纤接入第一个路由应该也是没问题的),我想在第一个路由器上再接一个无线路由(嘿嘿,好wifi跟再接入一台电脑) 转载来源:(h ...
最新文章
- tq3358 linux 串口驱动编程,TQ335x——spidev驱动的生成
- 该虚拟机似乎正在使用
- java重要基础知识点_java基础知识点整理
- centos 7 /etc/rc.local 开机不执行的问题
- 《数据结构C语言版》——栈和队列详解(图文并茂),从零开始的学习
- rem适配的浏览器_移动端网页布局适配rem方案小结
- C4D立体素材|旅游度假主题海报,设计点睛之笔
- C#.Net工作笔记015---C#中Decimal类型四舍五入_小数点截位
- VS2017环境下动态链接库编写及调用
- 学习nodejs之restful
- 一、 kettle开发、上线常见问题以及防错规范步骤
- 函数最值题目及答案_高考数学攻克压轴题:圆锥曲线取值范围和最值问题解题模型...
- 基于html的2048小游戏,基于jQuery的2048小游戏设计(网页版)
- 3D打印路径填充算法 -- Connected Fermat Spirals for Layered Fabrication
- PS实战操作之蒙版、路径
- 使用递归判断字符串是否回文
- DOS命令:format
- 计算机绘图软件应用于哪些领域,解答电脑绘图软件有哪些
- 灰狼(GWO)算法(附完整Matlab代码,可直接复制)
- 关于浅拷贝、深拷贝的探究
热门文章
- 配置多个git账号_在Windows下配置多个git账号
- php与tcp哪个快,PHP程序员如何理解TCP协议
- SpringBoot与quartz框架实现分布式定时任务
- 创建MySQL数据库中useUnicode=truecharacterEncoding=UTF-8
- 20-javamail
- 检索数据_14_返回不重复的记录
- 服务器配置文件salt,saltstack 配置文件详解
- 整理了一下linux/ubuntu里面卸载软件的方法
- 改进博客园Markdown显示功能(加代码行号、显示代码所用编程语言)
- 02.Android之IPC机制问题