我以我个人的Mynote工程说明,目的是要在backend这个app里面设置不同的model对应daysn和bear两个数据库进行操作

现在我们先简单对一个完全新建的django工程配置一个自动在mysql生成表的这么一个东西,

配置setting

然后随便写个model

然后

E:\大数据\DjangoMyNote\Mynote>python manage.py makemigrations backend
Migrations for 'backend':
backend\migrations\0001_initial.py
- Create model test E:\大数据\DjangoMyNote\Mynote>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, backend, contenttypes, sessions
Running migrations:
Applying backend.0001_initial... OK

然后就创建了一个表,好,这是前提。ps,其他表先建了

好,从这里开始记录一个完整的一个app对应多个数据库的过程,综合了n篇博客妈的没有一篇靠谱

首先我们建立一个空的app,假设叫another

那么我们在我们的主工程的setting肯定要注册进去,顺便配置一下我们的数据库连接

DATABASES = {
#系统默认加载的数据库daysn,于是这里的数据库连接名为default
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'daysn',
'USER':'root',
"PASSWORD":'',
"HOST":"*.*.*.*",
"PORT":"",
"CONN_MAX_AGE":*,
},
 #系统加载的数据库第二个bear,于是这里的数据库连接名为default
'default2': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'bear',
'USER':'root',
"PASSWORD":'',
"HOST":"*。*。*。*",
"PORT":"",
"CONN_MAX_AGE":*,
},
}
#待会我们在主工程的目录下新建一个DatabaseAppRouter文件,里面定义了一个DatabaseAppsRouter的class
DATABASE_ROUTERS = ['Mynote.DatabaseAppRouter.DatabaseAppsRouter']
#两个应用对应不同的数据库
DATABASE_APPS_MAPPING = {
'backend': 'default',
'another': 'default2',
}

好,现在我们新建一个路由就像上面说的

然后下面这段代码完全copy

# -*- coding: utf- -*-
from django.conf import settings DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING class DatabaseAppsRouter(object):
"""
A router to control all database operations on models for different
databases. In case an app is not set in settings.DATABASE_APPS_MAPPING, the router
will fallback to the `default` database. Settings example: DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'}
""" 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
return None # for Django 1.4 - Django 1.6
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 # Django 1.7 - Django 1.11
def allow_migrate(self, db, app_label, model_name=None, **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) == db
elif app_label in DATABASE_MAPPING:
return False
return None

然后我们可以去写我们的类了,因为我们的目的是要在backend这个app里面设置不同的model同时对应daysn和bear这两个数据库

那么测试如下,在backend的model.py里面加入这些玩意儿

from django.db import models

# Create your models here.

class test(models.Model):
test_id = models.IntegerField()
test_a_id = models.IntegerField() class mt(models.Model):
test_id = models.IntegerField()
test_a_id = models.IntegerField() class another(models.Model):
test_id = models.IntegerField()
test_a_id = models.IntegerField()
class Meta:
app_label = 'another' class dsasdas(models.Model):
test_id = models.IntegerField()
test_a_id = models.IntegerField()
class Meta:
app_label = 'another'

同步数据库要使用的是

python manage.py makemigrations

然后同步default
python manage.py migrate 同步非default
python manage.py migrate --database==default2

这样才会同步完两个数据库

好的,一个app连接多个数据库表演完毕。

ps:我认为应该有其他方式啊。。不应该要通过新建一个没怎么用的空app  another来搞,哪路大神知道的话希望能救下小弟。

Django:同一个app支持多个数据库的更多相关文章

  1. Django 多数据库联用(同一个APP的models里不同class用不同数据库)

    很多网站有多数据库联用的文章,如自强学堂http://code.ziqiangxuetang.com/django/django-multi-database.html 大都只讲解如何让不同的app对 ...

  2. 第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理

    第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理 将一个app下的models数据库表注册到xadmin后台管理 重点 ...

  3. Django之路:模型(数据库)和自定义Field以及数据表的更改

    一.Django 模型(数据库) Django模型是与数据库相关的,与数据库相关的代码一般写在models.py中,Django支持sqlite3,MySQL,PostgreSQL等数据库,只需要在s ...

  4. Django框架的使用教程--mysql数据库[三]

    Django的数据库 1.在Django_test下的view.py里面model定义模型 from django.db import models # Create your models here ...

  5. 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  6. Django去操作已经存在的数据库

    你有没有遇到过这种情况? 数据库,各种表结构已经创建好了,甚至连数据都有了,此时,我要用Django管理这个数据库,ORM映射怎么办??? Django是最适合所谓的green-field开发,即从头 ...

  7. 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置

    Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...

  8. python 之 Django框架(APP和ORM的使用)

    12.3 APP 12.31 创建APP 一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码 用命令行创建一个APP: python3 manage.py startapp app0 ...

  9. Python中的Django框架中prefetch_related()函数对数据库查询的优化

    实例的背景说明 假定一个个人信息系统,需要记录系统中各个人的故乡.居住地.以及到过的城市.数据库设计如下: Models.py 内容如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

随机推荐

  1. python操作MongoDB、MySQL、Postgres、Sqlite、redis实例

    总结:除了MongoDB.redis,其他三个数据库用python来操作其实是差不多的.所有例子都很简单,实际生产环境中的数据库操作远比这复杂得多,命令也比我例子中的多得多,我这里高级一点的用法就是批 ...

  2. 【题解】Luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control

    原题传送门 看到这种题,应该一眼就能知道考的是最小割 没错这题就是如此简单,跑两遍最大流(最小割=最大流),一次边权为题目所给,一次边权为1 还有一种优化,优化后只需跑一次最大流,把每条边的权值改成w ...

  3. 如何加速GitHub访问速度

    http://tool.chinaz.com/网站中填入assets-cdn.github.com选取响应最小的ip,将ip.域名填入到C:\Windows\System32\drivers\etc下 ...

  4. 【Java基础】浅谈常见设计模式

    Num1:单例模式 基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 常见写法: 懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值 ...

  5. P4233 射命丸文的笔记

    思路 题目要求求的是哈密顿回路的期望数量,实际上就是哈密顿回路的总数/有哈密顿回路的竞赛图的数量 n个点的所有竞赛图中哈密顿回路的总数为 \[ (n-1)! 2^{\frac{n(n-1)}{2}-n ...

  6. CentOS yum换源

    1.备份系统自带yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.进入yum源配 ...

  7. java中捕获Oracle异常

    try{ } catch (Exception e){ String msg=.getMessage(): int index= msg. toUpperCase(). indexOf("O ...

  8. toFixed()精度丢失;复选框全选、取消

    一.精度丢失和重写toFixed()函数 1.重写toFixed() Number.prototype.toFixed = function(length){ var carry = 0; //存放进 ...

  9. Django 管理站点

    这一部分是关于 Django 的自动管理界面.这个特性是这样起作用的:它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作.在这里我们将讨论如何激活,使用和定制这 ...

  10. win10无法搜索本地文件,修复方法?

    win10无法搜索本地文件,实在太不方便了,网上查了一圈没几个方法有效的,筛选出来2个成功解决的问题,具体是哪个起到作用,不太清楚,都放上来,大家自行选择! 方法1:按“Windows+ X”后选择“ ...