博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django框架数据库相关操作
阅读量:7023 次
发布时间:2019-06-28

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

redis做django的缓存

```pip install django-redis``````pythonCACHES = {    "default": {        "BACKEND": "django_redis.cache.RedisCache",        "LOCATION": "redis://127.0.0.1:6379/1",        "OPTIONS": {            "CLIENT_CLASS": "django_redis.client.DefaultClient",        }    }}```
View Code

 

将session保存在redis中

SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "default"

 

ORM性能

  1. 能使用values(),就不要用对象.属性

  2. select_related 主动连表 外键或者一对一

  3. prefetch_related 子查询 外键或者一对一或者多对多

  4. only 只查询所需要的字段 defer 排除字段

多个数据库

配置多个数据库

 

DATABASES = {    'default': {        'ENGINE': 'django.db.backends.sqlite3',        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),    },    'db2': {        'ENGINE': 'django.db.backends.sqlite3',        'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),    },}
settings.py

 

迁移 migrate --databse db2

 

读写分离

手动读写分离:

写入数据库 use using models.Student.objects.using('db2').create(name='xxxx') 读取数据库 ret = models.Student.objects.using('default').all() 读取数据库 ret = models.Student.objects.using('default').all() for i in ret: i.name = 'alex1111' i.save(using='default')

通过配置,自动读写分离

app01.router:创建py文件,写类,定义方法

class Router:     def db_for_read(self, model, **kwargs): return 'default' def db_for_write(self, model, **kwargs): return 'db2'

settings.py中

DATABASE_ROUTERS = ['app01.router.Router']

一主多从

写入一个数据中,从多个数据库读取

一主多从 import random ​ ​ class Router:     def db_for_read(self, model, **kwargs): return random.choice(['db1', 'db2', 'db3']) def db_for_write(self, model, **kwargs): return 'default'

分库分表

app01的表放在db1

app02的表放在db2

分库分表 ​ class Router:     def db_for_read(self, model, **kwargs): label = model._meta.app_label if label == 'app01': return 'db1' elif label == 'app02': return 'db2' def db_for_write(self, model, **kwargs): label = model._meta.app_label if label == 'app01': return 'db1' elif label == 'app02': return 'db2'

model

model._meta.app_label   app名称 model._meta.model_name model名称

 

转载于:https://www.cnblogs.com/WHWWHW/p/10975130.html

你可能感兴趣的文章
Web APi之EntityFramework【CRUD】(三)
查看>>
Scala IDE里的WorkSheet的使用
查看>>
Net设计模式实例之迭代器模式(Iterator Pattern)
查看>>
让Editplus自动格式化js、css、html。。。
查看>>
Linux内核跟踪之ring buffer的实现【转】
查看>>
MediaWiki安装配置(Linux)【转】
查看>>
搜索服务solr 一二事(1) - solr-5.5 使用自带Jetty或者tomcat 搭建单机版搜索服务器...
查看>>
Mac mysql 解决中文乱码
查看>>
8.16. config
查看>>
I.MX6 console 跳过 login
查看>>
ASP.NET 5 (vNext) 理解和概述
查看>>
第 44 章 LevelDB
查看>>
Java实现文件复制的四种方式
查看>>
使用数据库sqlite3 C语言实现登陆注册的功能
查看>>
[LeetCode] Distinct Subsequences
查看>>
Android gif 录屏
查看>>
51Nod 1277 字符串中的最大值(KMP,裸题)
查看>>
docker~windows版本的安装与使用
查看>>
eclipse集承jboss服务器
查看>>
Web APi之认证(Authentication)两种实现方式后续【三】(十五)
查看>>