• Django--模型


    对象关系映射(Object Relational Mapping,简称ORM)

    什么是ORM:面向对象和关系型数据库的一种映射

                        类----->表

                      对象--->数据行,记录

                      属性---->字段

    模型- 常用字段及参数:

          自增:  AutoField

              必须填入参数 primary_key=True 设置成数据库的主键

          整数类型:  IntegerField

              数值范围-2x10位-----2x10位

          布尔值:  BooleanField

          字符串类型:   CharField

                 必须提供 max_length 参数 设置字符的长度

          文本类型:  TextField

          日期类型:  DateField  (格式/YYYY-MM-DD)   和  DatetimeField  (格式/YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] )

                 参数:  auto_now_add    增加对象时自动添加日期时间

                      auto_now      每次修改和增加时自动添加或修改成当前时间

          小数类型:  DecimalField

                  参数:   max_digits  小数总长度

                       decimal_places 小数位长度

    常用的十三种查询方法:

        返回的结果是对象列表

            all( )  获取所有的数据  如:  ret=models.Person.objects.all()

            filter( )  获取所有满足条件的对象  如:  ret=models.Person.objects.filter(id=1)

            exclude( )  获取所有不满足条件的对象  如:  ret=models.Person.objects.exclude(id=1)

            order_by( )  排序 默认升序 -降序   如:  ret=models.Person.objects.all().order_by('age','id')

            reverse( )  给已经排好序的结果倒叙排列  如:  ret=models.Person.objects.all(().order_by('age','id').reverse()

            values( )  获取对象的字段名和值 不指定字段名,将获取所有字段的名和值  值的格式 [ {},{} ]  如:ret=models.Person.objects.all().values('name','id')  

            values_list( )  获取对象的值 不指定字段名,将获取所有字段的值 值的格式 [ (),() ]

            distinct( )  去重

        返回的结果是对象:

            get( )  获取一个对象  没有或多个时报错  如:ret=models.Person.objects.get(id=1)

            first( )   取第一个对象  如:  ret=models.Person.objects.filter(id=100).first()

            last( )   取最后一个对象  如:  ret=models.Person.objects.filter(id=100).last()

        返回的结果是布尔值:

            exists( )   判断数据是否存在    如:  ret=models.Person.objects.filter(id=1).exists()

        返回的结果是数字:

            count( )  计数   如:ret=models.Person.objects.all().count()

     filter的过滤集合功能:

          __gt  (大于)   __gte  (大于等于)  __lt  (小于)  __lte  (小于等于)  __range=[1,3]  (范围,查找所有的值,包括1和3)  __in=[1,3]  (查找1和3)  

          __year (进行精确的年匹配)

          __contains  (包含,含有该字段,区分大小写)  __icontains  (不区分大小写)

          __startswith  (以什么开头)  __istartswith  (以什么开头,不区分大小写)

          __endswith  (以什么结尾)  __iendswith  (以什么结尾,不区分大小写)

          

          如:  ret=models.Person.objects.filter(id__gt=1, id__lt=3)   

    外键的操作:

        正向查询:

          book_oj.publisher  关联的对象

          book_obj.publisher_id  关联的对象的id

          book_obj.publisher.id  关联的对象的id 比_id多一个步骤

        反向查询:

          不指定related_name

          pub_obj.book_set 管理对象

          指定related_name='books'

          pub_obj.books 管理对象

        基于字段查询

          指定related_name 用这个名字 如果在指定了related_query_name 则只能用这次指定的名字

    多对多操作,基于对象的查询:

        正向:author_obj.books.all()

        反向:

          不指定related_name    表名加set

          如: book_obj.author_set.all()

          指定related_name='authors'

          如: book_obj.authors.all()

      set  设置多对多关系

      author_obj.books.set([])

      author_obj.books.set([1,2,3])  要关联对象的ID  [对象的ID,对象的ID]

      author_obj.books.set(models.Book.objects.all())    要关联对象  [对象,对象]

      add  添加多对多的关系

      author_obj.books.add(1)   要关联的对象的id

      author_obj.books.add(models.Book.objects.get(id=2))   要关联的对象

      remove()  删除多对多的关系

      author_obj.books.remove(1)   要关联对象的id

      author_obj.books.remove(models.Book.objects.get(id=2))   要关联的对象

      clear() 清空当前对象的多对多关系

      author_obj.books.clear()

  • 相关阅读:
    php 信号量
    .net 反射初体验
    IEnumerable,IQueryable之前世今生
    [SQL]511+512+534+550+569
    [SQL]183+184+185+196+197
    [SQL]3.26--175+176+177+178+180+181+182
    [剑指offer]10.斐波那契数列+青蛙跳台阶问题
    [剑指offer]14-1.剪绳子
    [剑指offer]62.圆圈中最后剩下的数字
    [剑指offer]52.两个链表的第一个公共节点
  • 原文地址:https://www.cnblogs.com/leo-tail-x/p/10076751.html
Copyright © 2020-2023  润新知