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表进行增删查改操作

   
原文地址:https://www.cnblogs.com/usherwang/p/13811398.html