day60

批量插入(bulk_create)

  1. # bulk_create
  2. obj_list = []
  3. for i in range(20):
  4. obj = models.Book(
  5. title=f'金pm{i}',
  6. price=20+i,
  7. publish_date=f'2019-09-{i+1}',
  8. publish='24期出版社'
  9. )
  10. obj_list.append(obj)
  11. models.Book.objects.bulk_create(obj_list) #批量创建
  12. request.POST -- querydict类型 {'title': ['asdf '], 'price': ['212'], 'publish_date': ['2019-09-12'], 'publish': ['asdf ']}
  13. data = request.POST.dict() -- 能够将querydict转换为普通的python字典格式
  14. 创建数据
  15. models.Book.objects.create(
  16. # title=title,
  17. # price=price,
  18. # publish_date=publish_date,
  19. # publish=publish
  20. **data
  21. )

查询api

  1. all() :结果为queryset类型
  2. filter :条件查询,结果是queryset类型
  3. 查询所有数据,跟all一样
  4. models.UserInfo.objects.filter()
  5. 单条件查询
  6. models.UserInfo.objects.filter(id=5)
  7. 多条件查询
  8. ret = models.Book.objects.filter(title='金pm7',publish='24期出版社')
  9. 查询条件不能匹配到数据时,不会报错,返回一个空的queryset,<QuerySet []>,如果没有写查询条件会获取所有数据,queryset类型的数据还能够继续调用fitler方法
  10. get() model对象
  11. ret = models.Book.objects.get() #得到的是一个model对象,有且只能有一个
  12. 1. 查不到数据会报错 :Book matching query does not exist.
  13. 2. 超过一个就报错 :returned more than one Book -- it returned 13!
  14. exclude() #排除,queryset类型
  15. 1.object能够调用,models.Book.objects.exclude(title__startswith='金pm')
  16. 2.queryset类型数据能够调用, models.Book.objects.all().exclude(title__startswith='金pm')
  17. order_by()排序,queryset类型
  18. models.Book.objects.all().order_by('-price','id') #orderby price desc,id asc;
  19. reverse() 反转,queryset类型
  20. models.Book.objects.all().order_by('id').reverse() #数据排序之后才能反转
  21. count() 计数,统计返回结果的数量
  22. models.Book.objects.all().count()
  23. first() 返回第一条数据,结果是model对象类型
  24. last() 返回最后一条数据,结果是model对象类型
  25. # ret = models.Book.objects.all().first()
  26. ret = models.Book.objects.all().last()
  27. exists() 判断返回结果集是不是有数据
  28. models.Book.objects.filter(id=9999).exists() #有结果就是True,没有结果就是False
  29. values(返回的queryset,里面是字典类型数据),queryset类型
  30. values_list(返回的queryset,里面是数组类型数据),queryset类型
  31. models.UserInfo.objects.filter(id__gt=2).values()
  32. ret = models.Book.objects.filter(id=9).values('title','price')
  33. # ret = models.Book.objects.all().values_list('title','price')
  34. # ret = models.Book.objects.all().values()
  35. # ret = models.Book.objects.values() #调用values或者values_list的是objects控制器,那么返回所有数据
  36. distinct() 去重,配置valuesvalues_list来使用
  37. models.Book.objects.all().values('publish').distinct()
  38. 或语句
  39. from django.db.models import Q
  40. ret = models.UserInfo.objects.filter(Q(price=50) | Q(price=100) | Q(price=150))

filter双下划线查询——queryset类型

  1. # ret = models.Book.objects.all().values('publish').distinct()
  2. # ret = models.Book.objects.filter(price__gt=35) #大于
  3. # ret = models.Book.objects.filter(price__gte=35) # 大于等于
  4. # ret = models.Book.objects.filter(price__lt=35) # 小于等于
  5. # ret = models.Book.objects.filter(price__lte=35) # 小于等于
  6. # ret = models.Book.objects.filter(price__range=[35,38]) # 大于等35,小于等于38 # where price between 35 and 38
  7. ret = models.Book.objects.filter(price__in=[50,60,80]) 506080 === or
  8. # ret = models.Book.objects.filter(title__contains='金pm') # 字段数据中包含这个字符串的数据都要
  9. # ret = models.Book.objects.filter(title__contains='金pm')
  10. # ret = models.Book.objects.filter(title__icontains="python") # 不区分大小写
  11. # from app01.models import Book
  12. # ret = models.Book.objects.filter(title__icontains="python") # 不区分大小写
  13. # ret = models.Book.objects.filter(title__startswith="py") # 以什么开头,istartswith 不区分大小写
  14. # ret = models.Book.objects.filter(publish_date='2019-09-15')
  15. 某年某月某日:
  16. ret = models.Book.objects.filter(publish_date__year='2018')
  17. ret = models.Book.objects.filter(publish_date__year__gt='2018')#2018写数字也可以
  18. ret = models.Book.objects.filter(publish_date__year='2019',publish_date__month='8',publish_date__day='1')
  19. 找字段数据为空的双下滑线
  20. models.Book.objects.filter(publish_date__isnull=True) #这个字段值为空的那些数据

表结构

一对一:OneToOneField('表名',to_field='字段名',on_delete=CASCADE)

多对一:ForeignKey('表名',to_field='字段名',on_delete=CASCADE)

多对多:ManyToManyField('表名')

  1. from django.db import models
  2. class Author(models.Model):
  3. """
  4. 作者表
  5. """
  6. name=models.CharField( max_length=32)
  7. age=models.IntegerField()
  8. # authorDetail=models.OneToOneField(to="AuthorDetail",to_field="nid",on_delete=models.CASCADE) #
  9. au=models.OneToOneField("AuthorDetail",on_delete=models.CASCADE)
  10. class AuthorDetail(models.Model):
  11. """
  12. 作者详细信息表
  13. """
  14. birthday=models.DateField()
  15. telephone=models.CharField(max_length=11)
  16. addr=models.CharField(max_length=64)
  17. # class Meta:
  18. # db_table='authordetail' #指定表名
  19. # ordering = ['-id',]
  20. class Publish(models.Model):
  21. """
  22. 出版社表
  23. """
  24. name=models.CharField( max_length=32)
  25. city=models.CharField( max_length=32)
  26. class Book(models.Model):
  27. """
  28. 书籍表
  29. """
  30. title = models.CharField( max_length=32)
  31. publishDate=models.DateField()
  32. price=models.DecimalField(max_digits=5,decimal_places=2)
  33. publishs=models.ForeignKey(to="Publish",on_delete=models.CASCADE,)
  34. authors=models.ManyToManyField('Author',)

day60——单表操作补充(批量插入、查询、表结构)的更多相关文章

  1. .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑

    在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...

  2. MySQL数据分析-(12)表操作补充:字段属性

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天我们分享的主题是表操作补充之字段属性,依照惯例第一部分,jacky先跟大家分享本课时的学习逻辑 (一)学习逻辑 我们说创建 ...

  3. 一次EF批量插入多表数据的性能优化经历

    距离上次的博客已经有15个多月了,感慨有些事情还是需要坚持,一旦停下来很有可能就会停很久或者从此再也不会坚持.但我个人一直还坚持认为属于技术狂热份子,且喜欢精益求精的那种.最近遇到两个和数据迁移相关的 ...

  4. MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束

    最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis 的foreach标签进行循环插入,可是搬照Mysql的批量插入会产生 异常 ### ...

  5. Hibernate批处理操作优化 (批量插入、更新与删除)

    问题描述 我开发的网站加了个新功能:需要在线上处理表数据的批量合并和更新,昨天下午发布上线,执行该功能后,服务器的load突然增高,变化曲线异常,SA教育了我一番,让我尽快处理,将CPU负载降低. 工 ...

  6. Set,Sorted Set相关命令操作,批量插入及管道,事务

    Set SADD key member [member ...] 向key指定的set集合添加成员,次集合是排重的,从2.4版本后才支持添加多个如果key不存在则创建key以及set集合返回当前操作成 ...

  7. 将大量数据批量插入Oracle表的类,支持停止续传

    之前用create table select * from XXTable无疑是创建庞大表的最快方案之一,但是数据重复率是个问题,且数据难以操控. 于是我在之前批量插数据的基础上更新了一个类,让它具有 ...

  8. Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化

    知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...

  9. MySQL数据分析-(13)表操作补充:索引

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天跟大家分享的主题是表补充之索引: (一)前面课程的小节以及本节课程的逻辑梳理 在正式分享主题之前,jacky先跟大家捋顺一 ...

随机推荐

  1. NioCopy文件

    步骤: 1.创建输入输出流  fis fos 2.创建通道  fis.getchannel()  fos.getchannel(); 3.创建缓存区      ByteBuffer buffer = ...

  2. Yum项目上线实战 (网站运维)-Linux从入门到精通第十一天(非原创)

    文章大纲 一.编译安装与卸载Nginx二.关于LAMP三.LAMP环境部署四.学习资料下载五.参考文章   一.编译安装与卸载Nginx Nginx:是一款比较流行的web服务器软件,类似于Apach ...

  3. 安装php源码包内的扩展

    本地环境 PHP 7.0.4 (cli) (built: Mar 13 2016 21:50:22) ( NTS ) 安装 进入源码包中的ext文件夹中 [root@test etc]# cd /us ...

  4. Python从零开始——运算符

  5. hdu2126 类01背包(三维数组的二维空间优化)

    题目描述: 对于给出的n个物品,每个物品有一个价格p[i],你有m元钱,求最多能买的物品个数,以及有多少种不同的方案 题目分析: 类似01背包的题目,一般的01背包问题我们遇到的是求n个物品,有m的容 ...

  6. xadmin引入django-ckeditor富文本编辑器

    一.安装: pip install django-ckeditor 安装django-ckeditor库 https://github.com/django-ckeditor/django-ckedi ...

  7. win10 任务栏上的工具栏,重启消失的解决方法

    首先谈下 <任务栏的工具栏> 对于很多人来言,还是有可取性的 任务栏的工具栏对编程者的作用 一般来说,我们会经常查看某些API文档,虽然现在是联网也很方便,但如果都下载下来,整理到一个文件 ...

  8. nginx 代理服务

    1.nginx反向代理服务 location ~ /test_proxy.html$ { proxy_pass http://127.0.0.1:8080;(代理访问127.0.0.1:8080) } ...

  9. 富文本编辑器 KindEditor 的基本使用 文件上传 图片上传

    富文本编辑器 KindEditor 富文本编辑器,Rich Text Editor , 简称 RTE , 它提供类似于 Microsoft Word 的编辑功能. 常用的富文本编辑器: KindEdi ...

  10. 2.8/4/6/8mm/12mm焦距的镜头分别能监控多大范围?

    2.8/4/6/8mm/12mm焦距的镜头分别能监控多大范围? 相关介绍 一.焦距和监控距离的关系 我司IPC镜头焦距有2.8/4mm/6mm/8mm等多种选择,可以满足室内外各种环境的拍摄需求.IP ...