day60

批量插入(bulk_create)

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

查询api

all()  :结果为queryset类型

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

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

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

表结构

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

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

多对多:ManyToManyField('表名')

from django.db import models

class Author(models.Model):
"""
作者表
"""
name=models.CharField( max_length=32)
age=models.IntegerField()
# authorDetail=models.OneToOneField(to="AuthorDetail",to_field="nid",on_delete=models.CASCADE) #
au=models.OneToOneField("AuthorDetail",on_delete=models.CASCADE) class AuthorDetail(models.Model):
"""
作者详细信息表
"""
birthday=models.DateField()
telephone=models.CharField(max_length=11)
addr=models.CharField(max_length=64)
# class Meta:
# db_table='authordetail' #指定表名
# ordering = ['-id',] class Publish(models.Model):
"""
出版社表
"""
name=models.CharField( max_length=32)
city=models.CharField( max_length=32) class Book(models.Model):
"""
书籍表
"""
title = models.CharField( max_length=32)
publishDate=models.DateField()
price=models.DecimalField(max_digits=5,decimal_places=2)
publishs=models.ForeignKey(to="Publish",on_delete=models.CASCADE,)
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. Jenkins 任务定时

    在项目配置中选择 Build Triggers 下勾选 Build periodically,可以对项目进行定时构建设置.构建设置详细可通过右边的问号符号进行查看. 定时构建字段遵循 cron 的语法 ...

  2. QT场景视图父子关系图元打印研究

    在之前的一篇文章中,实现了QT场景视图的打印功能,主要通过render函数来实现,非常简单和方便. 在实际的项目需求中,除了打印整个场景外,还需要对单个图形进行打印操作,基于item的图形可以在pai ...

  3. ios证书制作与上架指南

    项目开发完了,要上架 ios AppStore 记录一下经过,以及需要提前准备和预防的东西,以便下次省心! 一.首先要申请开发者账号: 账号按流程注册申请,当时申请了够10遍,总结以下经验: 1.申请 ...

  4. uni-app项目记录

    1.如何定义一个全局属性 在App.vue 文件中,以 global.属性名= XXX; 定义 在其他页面就以 global.属性名来调用 或者在min.js 中使用 Vue.prototype 挂载 ...

  5. android studio学习----Warning:Unable to find optional library: org.apache.http.legacy

    主要是没有  android-23的版本 1.导入工程以后 Error:Could not find com.Android.tools.build:gradle:1.3.1. Searched in ...

  6. Kaldi语音识别快速入门

    一.简介 Kaldi是使用C++编写的语音识别工具包,Apache License v2.0许可.主要供语音识别研究人员使用.Kaldi的目标和范围与HTK类似.目标是拥有易于修改和扩展的现代而灵活的 ...

  7. 指针专题6-空指针NULL和void指针

    1 NULL指针 一个指针变量可以指向计算机中任何一块内存,不管该内存有没有被分配,也不管该内存有没有使用权限,只要把地址给他,他就可以指向.C语言没有一种机制保证指向内存的正确性,程序员必须自己提高 ...

  8. 重复的DNA序列[哈希表] LeetCode.187

    所有 DNA 由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:"ACGAATTCCG".在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助. 编写一个函数 ...

  9. 洛谷P2634 [国家集训队]聪聪可可(点分治)

    传送门 题意: 给出一颗树,每条边都有一定的边权. 先问点之间路径和为\(3\)的倍数的点对有多少. 思路: 点分治模板题. 可以将问题转化为经过一个点\(t\)的路径和不经过点\(t\)的路径两种情 ...

  10. c#引用c++dll和c++导出类出现的各种问题

    最近对一些第三方类库进行c++托管以便c#调用  因为之前没弄过,出现各种各样的问题 fatal error LNK1104: 无法打开文件“xxx.lib”或者xxx.dll 等等等 总结: 1.字 ...