昨日内容回顾 模型层 单表 *** 作 1.增 user_obj = models.User.objects.create() user_obj = models.User() user_obj.save() 2.改 models.User.objects.filter().update() user_obj = models.User.objects.filter().first() user_obj.username = ‘jason‘ user_obj.save() 3.查 models.User.objects.filter() models.User.objects.all() models.User.objects.get() 4.删 models.User.objects.filter().delete() user_obj = models.User.objects.filter().first() user_obj.delete() 13条查询方法 all() filter() get() values() # 列表套字典 values_List() # 列表套元组 first() last() count() exclude() distinct() order_by() exists() reverse() 神奇的双下划綫查询 价格大于 小于 大于等于 小于等于 在什么之间 或好几个选择 price__gt price__lt price__gte price__lte price__in price__range 书籍名称中包含 Title__contains=‘p‘ Title__icontains=‘p‘ 创建的年份 create_time__year 多表 *** 作 外键字段的增删改查 一对多 publish_ID = 1 publish = publish_obj 多对多 add() set() remove() # 上面三个都支持 传数字或者是对象 并且都可以传多个 # 但是set必须接受一个可迭代对象 clear() # 不需要传参数 直接清空所有关系 跨表查询 规律:只要是queryset对象 就可以无限制的点queryset的方法!!! 正方向概念 正向:关联字段在当前表中 反向:关联字段不再当前表 结论:正向查询按字段,反向查询按表名小写 """ 不要一次性把orm写完,写一点看一点 """ # 基于对象的跨表查询(子查询) # 一次只拿一个对象 然后利用对象点的 *** 作 完成数据的查询 # 正向 book_obj.publish.name book_obj.authors # App01.Author.None book_obj.authors.all() author_obj.author_detail.phone # 反向 """反向表名小写什么时候需要加_set(当获取的是多个对象的饿时候)""" publish_obj.book_set # App01.Book.None publish_obj.book_set.all() author_obj.book_set # App01.Book.None author_obj.book_set.all() author_detail_obj.author.name # 基于双下划綫的跨表查询(连表查询) models.Book.objects.filter().values(‘publish__name‘) models.Publish.objects.filter(book__Title=‘三‘).values(‘name‘) models.Book.objects.filter().values(‘authors__author_detail__phone‘) # 只要表中有外键字段 你可以通过__无限制的跨表 F与Q F查询 从数据库中获取字段对应的数据 库存数大于卖出数 Q查询 与 filter(Q(),Q()) filter(Q()&Q()) 或 filter(Q()|Q()) 非 filter(~Q()) 补充 q = Q() q.connector = ‘or‘ q.children.append((‘Title‘,‘三‘)) q.children.append((‘price‘,666)) models.Book.objects.filter(q)内容复习 Django ORM 常用字段和参数 常用字段 autoFIEld
int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为ID的列。
IntegerFIEld一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,)
CharFIEld(在MysqL中是 varchar类型 且django中没有 char字段 需要自己定义)字符类型,必须提供max_length参数, max_length表示字符长度。
在django中如何定字段? 技巧:大部分设计到数据库的 模块都是 django.db import models(****)DateFIEld 和 DateTimeFIEld 以及他们的参数 auto_Now_add ----添加一次
配置auto_Now_add=True,创建数据记录的时候会把当前时间添加到数据库。
auto_Now --- 修改就改配置上auto_Now=True,每次更新数据记录的时候会更新该字段。
字段参数 null 例子: null=Ture用于表示某个字段可以为空。
unique 例子 unique = True 其他知识点:外键字段的一对一 可以不用Foreignkey直接就是 unique如果设置为unique=True 则该字段在此表中必须是唯一的 。
db_index如果db_index=True 则代表着为此字段设置索引。
default为该字段设置默认值。
其他需要了解的字段 @H_404_281@from django.db import models# Create your models here.#Django中没有对应的char类型字段,但是我们可以自己创建class FixCharFIEld(models.FIEld): ‘‘‘ 自定义的char类型的字段类 ‘‘‘ def __init__(self,max_length,*args,**kwargs): self.max_length=max_length super().__init__(max_length=max_length,**kwargs) def db_type(self,connection): ‘‘‘ 限定生成的数据库表字段类型char,长度为max_length指定的值 :param connection: :return: ‘‘‘ return ‘char(%s)‘%self.max_length#应用上面自定义的char类型class Class(models.Model): ID=models.autoFIEld(primary_key=True) Title=models.CharFIEld(max_length=32) class_name=FixCharFIEld(max_length=16) gender_choice=((1,‘男‘),(2,‘女‘),(3,‘保密‘)) gender=models.SmallintegerFIEld(choices=gender_choice,default=3)自定义及使用了解字段
关系字段以及他的参数 ForeignKey 字段参数 to
设置要关联的表
to_fIEld设置要关联的表的字段
on_delete当删除关联表中的数据时,当前表与其关联的行的行为。
models.CASCADE
删除关联数据,与之关联也删除
db_constraint是否在数据库中创建外键约束,默认为True。
外键字段
当你在使用django2.X版本的时候 在建立外键关系时(*****)
需要你手动添加几个关键点参数
models.cascade
db_constraints 数据库查询优化 only与defer select_releated与prefect_releated
orm内所有的语句 *** 作 都是惰性查询:只会在你真正需要数据的时候才会走数据库,如果你单单只写orm语句时不会走数据库的
这样设计的好处 在于 减轻数据库的压力
总结
以上是内存溢出为你收集整理的☆Django☆---orm 字段 数据库查询优化 事务全部内容,希望文章能够帮你解决☆Django☆---orm 字段 数据库查询优化 事务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)