django-ORM

1 orm是什么
对象关系型数据库的一个映射
对应关系:
类 -> 表
对象 -> 数据行(记录)
属性 -> 字段

2 orm配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'orm16', # 数据库名
'USER':'root', # 用户
'PASSWORD':'123', # 密码
'HOST':'127.0.0.1', # 连接主机,默认本级
'PORT':3306
}
}
init 里面
import pymysql

models里创建类
命令
python manage.py makemigrations
python manage.py migrate

3 参数
null=True 数据库可为空
blank form表单可以为空
verbose_name 中文提示
default 默认值
unique 唯一
choices=((1,'xxx'))

4 必须会的 13条
返回quertset类型
all 全部
filter 筛选
exclude 排除
values 拿到字典
values_list 拿到元组
order_by 排序默认升序 -
reverse 在排序之后使用
distinct 去重
返回model对象
get 存在且唯一
first 拿quertset第一个对象
last
返回bool值
exists 查询是否存在
返回数字
count 查看quertset里面多少数据

5 单表的双下划线
__gt 大于
__lt 小于
__gte 大于等于
__lte 小于等于
__in[3,4] 在其中的一条
__range 在某个范围
__contains like
__startswith 以什么开始
__endswith 以什么结束
__isnull=True 拿对象为空的

6 一对多的操作
class Publish(models.Model):
name = models.CharField(max_length=32)

class Book(models.Model):
title = models.CharField(max_length=32)
Pub = models.Foreigned('Publish') # pub_id 默认级联删除

7 基于对象的查询
正向查询
book_obj.pub -> 出版社的对象
反向查询
pub_obj.book_set(类名小写_set)
pub_obj.book_set.all()

8 基于字段的查询
Book.object.filter(pub__name='xxx') 正向用外键

Publish.object.filter(book__title='xxxx') 反向用类名小写

9 多对多的操作
class Book(models.Model):
name = models.CharField(max_length=32)

class Author(models.Model):
title = models.CharField(max_length=32)
books = models.ManyToManyField('Publish')

author_obj.books.
book_obj.author_set.
方法
all
add(id) add(对象)
remove(id) remove(对象)
clear()
set([id]) 设置多对多的关系
create()

10 聚合和分组
聚合
from django.db.models import Max,Min,Avg,Sum,Count
Author.object.aggregate(max=Max('age')) -> 结果 {'max':111}
分组
Author.object.annotate(Count('books')) -> 结果 一个quertset对象

11 F和Q
F
filter(xx__gt=F('oo')) 自己的xx大于自己的oo
update(xx=F('oo')+2)
Q(条件) 中间方法或与非
and |
or &
not -

12 事物+行级锁
from django.db import transaction

with transaction.atomic():
# 操作
Author.object.filter().select_for_update() # 加上行级锁

posted @ 2020-08-17 13:16  李淳罡zZ  阅读(76)  评论(0)    收藏  举报