zoukankan      html  css  js  c++  java
  • Django——模型层-单表操作(常用和非常用字段和参数,查询表记录API,模糊查询,删改表记录)

    一、常用和非常用字段和参数

    # 常用字段
        -IntegerField   整数
        -AutoField
        -BooleanField
        -CharField
        -DateField
        -DateTimeField
        -DecimalField
        -FileField   上传文件,本质是varchar
        -ImageField   图片,本质是varchar,继承了FileField
        -TextField   存大文本
        -EmailField   本质是varchar
    # 非常用字段
        -BigAutoField
        -SmallIntegerField   
        -PositiveSmallIntegerField
        -PositiveIntegerField
        -BigIntegerField
        
        
                'AutoField': 'integer AUTO_INCREMENT',
                'BigAutoField': 'bigint AUTO_INCREMENT',
                'BinaryField': 'longblob',
                'BooleanField': 'bool',
                'CharField': 'varchar(%(max_length)s)',
                'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
                'DateField': 'date',
                'DateTimeField': 'datetime',
                'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
                'DurationField': 'bigint',
                'FileField': 'varchar(%(max_length)s)',
                'FilePathField': 'varchar(%(max_length)s)',
                'FloatField': 'double precision',
                'IntegerField': 'integer',
                'BigIntegerField': 'bigint',
                'IPAddressField': 'char(15)',
                'GenericIPAddressField': 'char(39)',
                'NullBooleanField': 'bool',
                'OneToOneField': 'integer',
                'PositiveIntegerField': 'integer UNSIGNED',
                'PositiveSmallIntegerField': 'smallint UNSIGNED',
                'SlugField': 'varchar(%(max_length)s)',
                'SmallIntegerField': 'smallint',
                'TextField': 'longtext',
                'TimeField': 'time',
                'UUIDField': 'char(32)',
                    
    # 常用参数
        -null
        -max_length
        -default
        -primary_key
        -unique
        -db_index
        
        # 
        -choices:比较常用(后面再说)
        -blank: django admin里提交数据,限制
            
    # 元数据
        -必须记住的
        class Meta:
                # 表名
            db_table = "book"
            #联合索引
            index_together = [
                ("name", "publish"),
            ]
            # 联合唯一索引
            unique_together = (("name", "publish"),)
            
       -了解
            # admin中显示的表名称
            verbose_name='图书表'
            #verbose_name加s
            verbose_name_plural='图书表'
            

    二、查询表记录API

    <1> all():                  查询所有结果
    <2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象
    <3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
    <4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象
    <5> order_by(*field):       对查询结果排序('-id')
    <6> reverse():              对查询结果反向排序
    <8> count():                返回数据库中匹配查询(QuerySet)的对象数量。
    <9> first():                返回第一条记录
    <10> last():                返回最后一条记录
    <11> exists():              如果QuerySet包含数据,就返回True,否则返回False
    <12> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列       
           model的实例化对象,而是一个可迭代的字典序列
    <13> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 <14> distinct(): 从返回结果中剔除重复纪录

    三、基于双下划线的模糊查询

    ps:gt,gte,lt,lte缩写的含义

    gt: greater than 大于

    gte: greater than or equal 大于等于

    lt: less than 小于

    lte: less than or equal 小于等于

    #1  价格在[100,200,300]这三个数字范围内 注意与range区别
    Book.objects.filter(price__in=[100,200,300]) 
    # 2 大于,小于,大于等于,小于等于
    Book.objects.filter(price__gt=100) #gt 大于
    Book.objects.filter(price__lt=100) #lt 小于
    Book.objects.filter(price__gte=100) #gte 大于等于
    Book.objects.filter(price__lte=100) #lte小于等于
    # 3 范围
    Book.objects.filter(price__range=[100,200])
    # 包含
    Book.objects.filter(title__contains="python")
    # 4 忽略大小写包含
    Book.objects.filter(title__icontains="python")
    # 5 以xx开头
    Book.objects.filter(title__startswith="py")
    # 6 时间类型,年份是2012年的
    Book.objects.filter(pub_date__year=2012)
    
    
    
        # 基于双下滑线的模糊查询
        # 1 in条件
        # res=models.Book.objects.filter(name__in=['西游记', '金梅'])
        # print(res)
        # 2 大于,小于,大于等于,小于等于
        # res=models.Book.objects.filter(id__gt=2)
        # res=models.Book.objects.filter(id__lt=2)
        # res=models.Book.objects.filter(id__gte=2)
        # res=models.Book.objects.filter(id__lte=2)
        # print(res)
    
        # 3 rang 范围 BETWEEN 1 AND 3   表示id范围是1,2,3 注意与in区别
        # res=models.Book.objects.filter(id__range=[1,3])
        # print(res)
    
        # 包含
        # res=models.Book.objects.filter(name__contains="金")
        # print(res)
        # 忽略大小写的包含
        # res=models.Book.objects.filter(name__icontains="金")
        # print(res)
        #
        # res=models.Book.objects.filter(name__startswith="金")
        # print(res)
        # res = models.Book.objects.filter(name__endswith='梅')
        # print(res)
    
        #
        # res=models.Book.objects.filter(publish_date__year='2020')
        # res=models.Book.objects.filter(publish_date__month='9')
        # print(res)

    四、删除表记录

    # 删除的两种方式
        # 第一种:queryset的delete方法
        # res=models.Book.objects.all().delete()
        # print(res)
        # 第二种:对象自己的delete方法
        # book = models.Book.objects.all().filter(name='金梅').first()
        # print(type(book))
        # res=book.delete()

    五、修改表记录

     #修改记录
        # 第一种:queryset的update方法
        # res=models.Book.objects.filter(publish='东京').update(name='金梅1')
        # print(res)
        # 第二种:对象自己的
        book = models.Book.objects.filter(name='xxx').last()
        book.name='asdfasd'
        book.save()
  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    基于分布式锁解决定时任务重复问题
    基于Redis的Setnx实现分布式锁
    基于数据库悲观锁的分布式锁
    使用锁解决电商中的超卖
  • 原文地址:https://www.cnblogs.com/guojieying/p/13807534.html
Copyright © 2011-2022 走看看