zoukankan      html  css  js  c++  java
  • 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表进行增删查改操作

       
  • 相关阅读:
    HDU 1022 Train Problem I
    HDU 1702 ACboy needs your help again!
    HDU 1294 Rooted Trees Problem
    HDU 1027 Ignatius and the Princess II
    HDU 3398 String
    HDU 1709 The Balance
    HDU 2152 Fruit
    HDU 1398 Square Coins
    HDU 3571 N-dimensional Sphere
    HDU 2451 Simple Addition Expression
  • 原文地址:https://www.cnblogs.com/usherwang/p/13811398.html
Copyright © 2011-2022 走看看