Django MySQL 多用户_Django 框架之 同时使用多个数据库
知识点
不同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 框架之 同时使用多个数据库相关推荐
- django mysql视图_Django框架使用mysql视图操作示例
本文实例讲述了django框架使用mysql视图操作.分享给大家供大家参考,具体如下: 一.mysql视图的创建 mysql中,在两个或者以上的基本表上创建视图,例如:在studentorm表和inf ...
- django mysql 教程_Django 入门教程
简介:本课程使用的开发环境为 Python 3.x .Django 1.8.13.课程中将对 Django 的环境搭建.视图.链接路由.模板.模型.数据库操作以及表单进行简单介绍,并结合简单实验示例加 ...
- mysql django构架图_Django框架之数据库ORM框架
首先,我来介绍一下什么是ORM框架: O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思.在ORM框架中,它帮 ...
- django2 mysql驱动_Django框架学习(二)Django连接Mysql数据库,实现表的增删改查
创建一个Django项目 方法: 1.使用 django-admin.py 管理工具来创建项目 2.用Pycharm专业版可以直接创建Django 项目 我直接用Pycharm创建的项目,比较简单,也 ...
- python能查询MySQL视图_Django框架使用mysql视图操作示例
本文实例讲述了Django框架使用mysql视图操作.分享给大家供大家参考,具体如下: 一.Mysql视图的创建 MySQL中,在两个或者以上的基本表上创建视图,例如:在StudentOrm表和Inf ...
- python django mysql安装_Django+Nginx+uWSGI+Mysql搭建Python Web服务器
原标题:Django+Nginx+uWSGI+Mysql搭建Python Web服务器 安装的时候全部选择英文,记得以前选择中文的时候安装时出了问题,服务器组件一个不选,Ubuntu安装做的很贴心,基 ...
- python框架django的使用_Django框架的基本使用,若依框架
Django框架的基本使用,若依框架 Django框架的基本使用 Django是一个功能强大的web框架 框架模式 1.MVC和MTV框架 MVC:Web服务器开发领域里著名的MVC模式,所谓MVC就 ...
- django mysql 初始化_Django初始化基础(1)
1,wed项目程序工作流程 2.Django生命周期 创建Django项目 root@dev:shiyanglou_project #wokon syl (syl) root@dev:shiyanlo ...
- django mysql 名称_Django 自定义表名和字段名
通过db_table和db_column自定义数据表名和字段名 假如你的数据库里已经有了一张数据表,且该表包含多个字段,你希望通过Django直接访问该数据表的各个字段而不是重新建立新表,你这时可以通 ...
最新文章
- gradient设置上下渐变_iOS 绘制渐变·实例篇
- chrome下input[type=text]的placeholder不垂直居中的问题解决
- freemarker 概述
- Sql Server之旅——第十三站 深入的探讨锁机制
- 解决SSH登录无响应timed out问题
- python分词_Python 结巴分词实现关键词抽取分析
- Python起源与发展
- Application_Start 不执行
- BZOJ35453551[ONTAK2010]Peaks——kruskal重构树+主席树+dfs序+树上倍增
- Linux小知识--通过MAC地址查询厂家OUI(成功率很高)
- vivo9.0以上系统如何无需Root激活XPOSED框架的流程
- IAST与RASP精选文章汇总
- kafka和ZK的关系
- git format-patch命令介绍
- python四边形转矩形_如何用PIL将矩形图像映射成四边形?
- 【四二学堂】标准GPS坐标,转换成百度坐标
- 模糊集合和隶属度详解
- 明基 X3000i 怎么样
- Groups CodeForces - 1598B
- 800个有趣句子帮你记忆7000个单词
热门文章
- 机器学习基础(七)——sigmoid 函数的性质
- Python基础——positional argument vs keyword argument
- python界面-(八)Python 图形化界面设计
- 学python能做什么类型的工作-最适合学Python的几类人,有你吗?
- python入门经典 财务-财务方面的学生如何学习python?
- python入门指南 许半仙-《猛一相亲指南》TXT全本 百度云网盘下载 by许半仙
- python基本代码教程-Python基础教程(第3版)
- python3.7安装步骤-python安装步骤_python 3.7.2安装教程
- linux系统怎么刷新,Fedora Linux如何更新系统
- 用户名、密码都有值激活提交按钮