Django ORM

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()



原文地址:https://www.cnblogs.com/Gin1/p/14312639.html