Django :orm操作
常用字段
AutoField自增字段 primary- key=True 变成主键
IntegerField
整形10位 -2147483648 ~ 2147483647.
CharField
字符串
varchar max .length 必填参数
DateField
DatetimeField
# auto_ now_ add=True 新增数据时自动保存当前的时间
# auto_now=True 新增和编辑数据时自动保存当前的时间
Booleanfield布尔类型
TextField
大文本
FloatField
浮点型
DecimalField 10进制小数 # 999. 99
# max digits, 小数总长度 5
# decimal places,小数位长度2
自定义字段
class myCharField(models .Fie1d):
自定义的char类型的字段类
def __init__ (se1f, max. _length, *args, **kwargs):
se1f .max_ length = max _length
super(MyCharField, se1f)._ init_ _(max. .1ength=max _length, *args, **kwargs)
def db_ type(self, connection):
限定生成数据库表的字段类型为char,长度为max length指定的值
return 'char(%s)' % self .max. .length
自定义字段的使用
phone = MyCharField(max_length=11)
![]LB5LYT4{GUA%L($}7}AD](D:old_boys28萌新day50 框架笔记~]LB5LY~T4{GUA%L($}7}AD.png)
字段参数
null = True # 字段可以为空
blank = True 允许用户输入为空
db_column = '数据库中的列名'
default = 默认值
db_index = 建立索引
unique = 唯一约束
verbose_name = 显示的一个字段名
choices 给用户的选择
使用django的admin
1。创建一个超级用户
python manage.py creatsupuser
2.在app下的admin注册models
from app_1 import models
# Register your models here.
admin.site.register(models.Person)
3.登录 127.0.0.1:ROST /admin
输入超级用户的账户密码 进行管理
表的参数
class Meta:
# 数据库生成的表名称 默认app名称 + _下划线 + 类名
db_table = 'person'
# admin中显示的表名称
verbose_name='个人信息'
# 联合索引
index_together=(
('name','age'), # 应为两个存在的字段
)
# 联合唯一索引
unique_together = (
('name','age'), # 应为两个存在的字段
)
Django
orm 双下划线
类似于魔法方法
# ret = models.Person.objects.filter(pid__It=6 )
# # 字段_条件 = less then 小于
#
# ret = models.Person.objects.filter(pid__gt=6)
# # 字段_条件 greater than 大于
#
# ret = models.Person.objects/filter(pid__Ite=6)
# # 字段_条件 less then equal 小于等于
#
# ret = models.Person.objects/filter(pid__gte=6)
# # 字段_条件 great then equal 大于等于
#
# ret = models.Person.objects.filter(pid__range=[1,6])
# # 字段_条件 range 包含左右
# ret = models.Person.objects.filter(pid__in=[1,5,6])
# # 成员判断
# ret = models.Person.objects.filter(name__contains='alex')
# 相当于数据库like写法
# ret = models.Person.objects.filter(name__icontains='alex')
# like ignore 忽略 忽略大小写
# ret = models.Person.objects.filter(name__startswith='a')
# 以什么开头
# ret = models.Person.objects.filter(name__istartswith='a')
# # 以什么开头 忽略大小写
#
# ret = models.Person.objects.filter(name__endswith='a')
# # 以什么结尾
# ret = models.Person.objects.filter(name__iendswith='a')
# # 以什么结尾 忽略大小写
#
# ret = models.Person.objects.filter(birth__year='2020')
# # 2020
# # ret = models.Person.objects.filter(birth__month='1')
# # ret = models.Person.objects.filter(birth__day='21')
#
# ret = models.Person.objects.filter(birth__contarins='2019-01-21')
#
# ret = models.Person.objects.filter(name__isnull=True)
# # 取name为空的数据
#
# ret = models.Person.objects.filter(name__isnull=False)
# print(ret)
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','day50_1.settings')
import django
django.setup()
from app_1 import models
# 正向查询
book_obj = models.Book.objects.get(pk=1)
# 基于对象查询
print(book_obj.pub)
# 关联的出版社对象
print(book_obj.pub_id)
# 关联出版社的id
# 反向查询
pub_obj = models.Publisher.objects.get(pk=1)
print(pub_obj)
print(pub_obj.book_set,type(pub_obj.book_set))
# 类名小写_set 关系管理对象
print(pub_obj.book_set.all())
# 指定related_name='book' 没有类名小写_set的写法
print(pub_obj.book_set.all())
# 基于字段的查询
ret = models.Book.objects.filter(name='XXX')
# 查询关于XXX的一条信息
ret = models.Book.objects.filter(pub__name='XXX')
# 直接查询关于指定外键的XXX信息
ret = models.Book.objects.filter(pub__name__contains='XXX')
# 查询包含某外键包含XXX的信息
ret = models.Publisher.objects.filter(name='XXX')
ret = models.Publisher.objects.filter(book_name='XXX')
# 不指定related_name='books' 类名小写
print(ret)
# 第一个__表示可以跨到另一张表__前是外键
ret = models.Publisher.objects.filter(book_name='XXX')
# 指定related_query_name='book'
必知必会13条
# all 查询所有的数据 QuerySet 对象列表 【对象,对象 】
ret = models.Person.objects.all()
# get 获取一个有且唯一的数据 对象 没有或者多个就报错
ret = models.Person.objects.get(pk=1)
# filter 获取满足条件的数据 对象列表 【对象,对象 】
ret = models.Person.objects.filter(pk=1)
# exclude 获取不满足条件的数据 对象列表 【对象,对象 】
ret = models.Person.objects.exclude(pk=1)
# order_by 排序 默认升序 字段前加- 降序排序 多字段排序
ret = models.Person.objects.all().order_by('-age','-pid')
# reverse 对已经排序的对象列表进行翻转
ret = models.Person.objects.all().order_by('pid').reverse()
# values 不指定字段 获取数据所有的字段名和值 QuerySet [ {},{} ]
# 指定字段 获取数据指定的字段名和值 QuerySet
ret = models.Person.objects.all().values('pid','name')
# values_list 不指定字段 获取数据所有的值 QuerySet [ (),() ]
# 指定字段 获取数据指定字段的值 QuerySet
ret = models.Person.objects.all().values_list('name','pid')
# distinct 去重
ret = models.Person.objects.values('age').distinct()
# count 计数
ret = models.Person.objects.all().count()
# first 获取第一个元素
ret = models.Person.objects.all().first()
# last 获取最后一个元素
ret = models.Person.objects.all().last()
# exists 判断是否有结果
ret = models.Person.objects.filter(pk=10).exists()