知识点

不同app使用不同数据库

同一app使用不同数据库

简介

参考文档

不同app使用不同数据库

数据库路由

若无指定路由,则使用默认路由方案-default,确保数据的检索和保存使用default数据库

也可指定路由

同一app使用不同数据库

在设置数据库路由前提下,可设置不同model的元数据app_label,达到使用不同路由

实验步骤

不同app使用不同数据库

设置数据库【settings.py】

使用sqlite3和mysql举例

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

},

'db1': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'django_advanced',

'HOST': '127.0.0.1',

'PORT': '3306',

'USER': 'root',

'PASSWORD': 'root',

}

}

设置数据库路由【settings.py】

DATABASES_APPS_MAPPING = {

'polls': 'default',

'polls2': 'db1',

}

DATABASE_ROUTERS = ['my_blog.database_app_router.DatabaseAppsRouter']

编写路由文件【database_app_router.py】

from django.conf import settings

class DatabaseAppsRouter(object):

def db_for_read(self, model, **hints):

app_label = model._meta.app_label

if app_label in settings.DATABASES_APPS_MAPPING:

res = settings.DATABASES_APPS_MAPPING[app_label]

print(res)

return res

return None

def db_for_write(self, model, **hints):

app_label = model._meta.app_label

if app_label in settings.DATABASES_APPS_MAPPING:

return settings.DATABASES_APPS_MAPPING[app_label]

return None

def allow_relation(self, obj1, obj2, **hints):

# 获取对应数据库的名字

db_obj1 = settings.DATABASES_APPS_MAPPING.get(obj1._mata.app_label)

db_obj2 = settings.DATABASES_APPS_MAPPING.get(obj2._mata.app_label)

if db_obj1 and db_obj2:

if db_obj1 == db_obj2:

return True

else:

return False

return None

def db_for_migrate(self, db, app_label, model_name=None, **hints):

if db in settings.DATABASES_APPS_MAPPING.values():

return settings.DATABASES_APPS_MAPPING.get(app_label) == db

elif app_label in settings.DATABASES_APPS_MAPPING:

return False

return None

新建一个APP,设置相关的内容

新建app【cmd】

(env_py35_django) D:\MaiZi_Edu\Dropbox\Maizi\Django_up\class_07>python manage.py startapp polls2

注册【settings.py】

INSTALLED_APPS = [

'polls2',

]

模板【models.py】

from django.db import models

# Create your models here.

class Poem(models.Model):

author = models.CharField(max_length=200)

title = models.CharField(max_length=200)

路由【urls.py】

from django.conf.urls import url

from . import views

urlpatterns = [

url(r'^polls2/poemlist2', views.poemlist2, name='poemlist2'),

]

视图【views.py】

from django.shortcuts import render

from .models import Poem

# Create your views here.

def poemlist2(req):

return render(req, 'poemlist2.html', {'poems': Poem.objects.all()})

数据库同步

(env_py35_django) D:\MaiZi_Edu\Dropbox\Maizi\Django_up\class_07>python manage.py makemigrations

Migrations for 'polls2':

0001_initial.py:

- Create model Poem

(env_py35_django) D:\MaiZi_Edu\Dropbox\Maizi\Django_up\class_07>python manage.py migrate --database db1

Operations to perform:

Apply all migrations: polls, admin, polls2, auth, contenttypes, sessions

Running migrations:

Applying polls2.0001_initial... OK

(env_py35_django) D:\MaiZi_Edu\Dropbox\Maizi\Django_up\class_07>python manage.py migrate

Operations to perform:

Apply all migrations: contenttypes, auth, sessions, polls, admin, polls2

Running migrations:

Applying polls.0007_authgroup_authgrouppermissions_authpermission_authuser_authusergroups_authuseruserpermissions_django... OK

Applying polls2.0001_initial... OK

(env_py35_django) D:\MaiZi_Edu\Dropbox\Maizi\Django_up\class_07>python manage.py runserver

Performing system checks...

按照上述步骤操作完成以后,polls就是用sqlite3数据库,polls2就使用mysql数据库。

同理,mangodb数据库也是可以这样子使用的

数据库配置【settings.py】

from mongoengine import connect

connect('test', host='127.0.0.1')

新建一个APP,设置相关的内容

新建app【cmd】

(env_py35_django) D:\MaiZi_Edu\Dropbox\Maizi\Django_up\class_07>python manage.py startapp polls3

注册【settings.py】

INSTALLED_APPS = [

'polls3',

]

模板【models.py】

from mongoengine import *

class Poem(Document):

meta = {

'collection':'poem_data'

}

poem_id = SequenceField(required=True, primary_key=True)

author = StringField()

title = StringField()

路由【urls.py】

from django.conf.urls import url

from . import views

urlpatterns = [

url(r'^polls3/poemlist3', views.poemlist3, name="poemlist3")

]

视图【views.py】

from django.shortcuts import render

from .models import Poem

# Create your views here.

def poemlist3(request):

return render(request, 'poemlist3.html', {"show_title": "所有诗词信息", "poems": Poem.objects.all()})

数据库同步

此处class_06已经给数据库写入数据,所以不需要同步数据库

访问的方法

http://127.0.0.1:8000/ 访问到的是polls这个app,使用的是sqlite3数据库

http://127.0.0.1:8000/polls2/poemlist2 访问到的是polls2这个app,使用的是mysql数据库

http://127.0.0.1:8000/polls3/poemlist3 访问到的是polls3这个app,使用的是mangodb数据库

同一个app下面使用不同数据库的方法

修改app_label【models.py】

class Book2(models.Model):

author = models.CharField(max_length=1024, blank=True, null=True)

title = models.CharField(max_length=1024)

class Meta:

app_label = 'polls2'

修改视图函数

from polls.models import ToDo, Poem, Book2

# Create your views here.

def home(request):

return render(request, 'home.html', {'poems': Poem.objects.all(), 'book2': Book2.objects.all()})

Django MySQL 多用户_Django 框架之 同时使用多个数据库相关推荐

  1. django mysql视图_Django框架使用mysql视图操作示例

    本文实例讲述了django框架使用mysql视图操作.分享给大家供大家参考,具体如下: 一.mysql视图的创建 mysql中,在两个或者以上的基本表上创建视图,例如:在studentorm表和inf ...

  2. django mysql 教程_Django 入门教程

    简介:本课程使用的开发环境为 Python 3.x .Django 1.8.13.课程中将对 Django 的环境搭建.视图.链接路由.模板.模型.数据库操作以及表单进行简单介绍,并结合简单实验示例加 ...

  3. mysql django构架图_Django框架之数据库ORM框架

    首先,我来介绍一下什么是ORM框架: O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思.在ORM框架中,它帮 ...

  4. django2 mysql驱动_Django框架学习(二)Django连接Mysql数据库,实现表的增删改查

    创建一个Django项目 方法: 1.使用 django-admin.py 管理工具来创建项目 2.用Pycharm专业版可以直接创建Django 项目 我直接用Pycharm创建的项目,比较简单,也 ...

  5. python能查询MySQL视图_Django框架使用mysql视图操作示例

    本文实例讲述了Django框架使用mysql视图操作.分享给大家供大家参考,具体如下: 一.Mysql视图的创建 MySQL中,在两个或者以上的基本表上创建视图,例如:在StudentOrm表和Inf ...

  6. python django mysql安装_Django+Nginx+uWSGI+Mysql搭建Python Web服务器

    原标题:Django+Nginx+uWSGI+Mysql搭建Python Web服务器 安装的时候全部选择英文,记得以前选择中文的时候安装时出了问题,服务器组件一个不选,Ubuntu安装做的很贴心,基 ...

  7. python框架django的使用_Django框架的基本使用,若依框架

    Django框架的基本使用,若依框架 Django框架的基本使用 Django是一个功能强大的web框架 框架模式 1.MVC和MTV框架 MVC:Web服务器开发领域里著名的MVC模式,所谓MVC就 ...

  8. django mysql 初始化_Django初始化基础(1)

    1,wed项目程序工作流程 2.Django生命周期 创建Django项目 root@dev:shiyanglou_project #wokon syl (syl) root@dev:shiyanlo ...

  9. django mysql 名称_Django 自定义表名和字段名

    通过db_table和db_column自定义数据表名和字段名 假如你的数据库里已经有了一张数据表,且该表包含多个字段,你希望通过Django直接访问该数据表的各个字段而不是重新建立新表,你这时可以通 ...

最新文章

  1. gradient设置上下渐变_iOS 绘制渐变·实例篇
  2. chrome下input[type=text]的placeholder不垂直居中的问题解决
  3. freemarker 概述
  4. Sql Server之旅——第十三站 深入的探讨锁机制
  5. 解决SSH登录无响应timed out问题
  6. python分词_Python 结巴分词实现关键词抽取分析
  7. Python起源与发展
  8. Application_Start 不执行
  9. BZOJ35453551[ONTAK2010]Peaks——kruskal重构树+主席树+dfs序+树上倍增
  10. Linux小知识--通过MAC地址查询厂家OUI(成功率很高)
  11. vivo9.0以上系统如何无需Root激活XPOSED框架的流程
  12. IAST与RASP精选文章汇总
  13. kafka和ZK的关系
  14. git format-patch命令介绍
  15. python四边形转矩形_如何用PIL将矩形图像映射成四边形?
  16. 【四二学堂】标准GPS坐标,转换成百度坐标
  17. 模糊集合和隶属度详解
  18. 明基 X3000i 怎么样
  19. Groups CodeForces - 1598B
  20. 800个有趣句子帮你记忆7000个单词

热门文章

  1. 机器学习基础(七)——sigmoid 函数的性质
  2. Python基础——positional argument vs keyword argument
  3. python界面-(八)Python 图形化界面设计
  4. 学python能做什么类型的工作-最适合学Python的几类人,有你吗?
  5. python入门经典 财务-财务方面的学生如何学习python?
  6. python入门指南 许半仙-《猛一相亲指南》TXT全本 百度云网盘下载 by许半仙
  7. python基本代码教程-Python基础教程(第3版)
  8. python3.7安装步骤-python安装步骤_python 3.7.2安装教程
  9. linux系统怎么刷新,Fedora Linux如何更新系统
  10. 用户名、密码都有值激活提交按钮