• django框架之单表查询等相关内容-67


    1 常用和非常用字段和参数概览

    # 常用字段
    -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='图书表'
           

     

    2 打印原生sql

    1 配置文件粘贴
    LOGGING = {
       'version': 1,
       'disable_existing_loggers': False,
       'handlers': {
           'console':{
               'level':'DEBUG',
               'class':'logging.StreamHandler',
          },
      },
       'loggers': {
           'django.db.backends': {
               'handlers': ['console'],
               'propagate': True,
               'level':'DEBUG',
          },
      }
    }

     

    3 查询表记录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():            从返回结果中剔除重复纪录

     

    4 基于双下划线的模糊查询

    #1  价格在[100,200,300]这个范围内
    Book.objects.filter(price__in=[100,200,300])
    # 2 大于,小于,大于等于,小于等于
    Book.objects.filter(price__gt=100)
    Book.objects.filter(price__lt=100)
    Book.objects.filter(price__gte=100)
    Book.objects.filter(price__lte=100)
    # 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
       # 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)

     

    5 删除表记录

        # 删除的两种方式
       # 第一种: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()

     

    6 修改表记录

       #修改记录
       # 第一种: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()

     

    7 python脚本中调用django环境

    # 在脚本中调用djagno服务
    import os
    if __name__ == '__main__':
       #1 引入django配置文件
       os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'day67.settings')
       # 2 让djagno启动
       import django
       django.setup()
       # 3 使用表模型
       from app01 import models
       models.Book.objects.create(name='测试书籍',publish='xx出版社')

     

     

     

     

     

    补充

    1 时区和国际化问题

    setting.py中
    1 后台管理汉语问题
    LANGUAGE_CODE = 'zh-hans'  # 管理后台看到的就是中文
    2 时区问题(使用东八区)
    TIME_ZONE = 'Asia/Shanghai'
       USE_TZ = False

     

    2 django admin(管理后台的简单使用)

    0 管理后台是django提供的可以快速对表进行增删查改操作

    1 创建一个后台管理账号
       python3 manage.py createsuperuser
       输入用户名
       输入邮箱(可以不填,敲回车)
       输入密码
       确认密码
       # 超级用户创建出来了,可以登录管理后台了
    2 admin中表中一行一行的数据显示我们定制的样子
    重写模型类的__str__方法

    3 blank参数作用

    1 需要把book表注册到admin中
    在app下的admin.py中写
       from app01 import models
    # 把book表注册一些,管理后台就能看到了
    admin.site.register(models.Book)
    2 可以快速的对book表进行增删查改操作

       
  • 相关阅读:
    T-SQL基础(1)
    shell命令--chage
    Oracle SQL Lesson (11)
    shell命令--chpasswd
    Oracle SQL Lesson (10)
    shell命令--passwd
    Oracle SQL Lesson (9)
    shell命令--usermod
    Spring中的工厂模式和单例模式
    Oracle SQL Lesson (8)
  • 原文地址:https://www.cnblogs.com/usherwang/p/13811398.html
Copyright © 2020-2023  润新知