ORM对单表进行增删改查

一,增加记录

 #第一种方式
b=Book(name="Linux",price=66,author="kelvin",pub_date="2018-12-28")
b.save() #第二种方式
Book.object.create(name="Linux",price=66,author="kelvin",pub_date="2018-12-28") 批量增加
models.Student.objects.bulk_create(objs_list) 有就更新,没有就创建
models.Student.objects.update_or_create(
  name='kelvin',
  defaults={
  'age':38,
  }
)

二,修改记录

 #第一种方式
Book.object.filter(id=1),update(pub_date="2019-03-01") #第二种方式
b=Book.object.get(id=1) #get() 只取出一个对象
b.price=888
b.save()

注意:在选择对应使用方法时,最好不适用save() 的这种方式,因为save() 方法会把记录的所有字段数据进行修改,即使该字段没有改变也会重新更新数据。

三,删除记录

 Book.objects.filter(id=1).delete() #筛选指定记录,调用delete()方法

四,查询记录

 #查询Book表中的所有记录
Book.objects.all() #查询Book表中的指定记录(切片操作)
Book.objects.all()[1:3:2] #[起始位置:终止位置:步长] #查询Book表中的第一条记录
Book.objects.first() #查询Book表中的最后一条记录
Book.objects.last() #查询之get方法
Book.objects.get(id=2) #get(筛选条件)
#注意:get()方法取到的是一个具体的对象记录,如果记录为空或记录多于一条就报错 #查询filter方法
Book.objects.filter(id=2) #filter(筛选条件)
#注意:filter() 查询结果均为QuerySet集合,即使集合中就一条数据 #查询Book表中记录的指定字段
ret=Book.objects.filter(price>20).values("name","price")
#结果:<QuerySet[{"name":"python","price":50},{"name":"Linux","price":88}]> ret=Book.objects.filter(price>20).values_list("name","price")
#结果:<QuerySet[("python",50),("Linux",88)]> #查询Book表中记录的指定字段外的记录
ret=Book.objects.exclude(price>20).values("name","price") ret=Book.objects.exclude(price>20).values_list("name","price") #查询结果去重
ret=Book.objects.filter(price>20).values("name").distinct() #查询结果数量统计
ret=Book.objects.filter(price>20).values("name").count()

查询相关的api:

 # 查询相关API:

 #  <1>filter(**kwargs):      它包含了与所给筛选条件相匹配的对象

 #  <2>all():                 查询所有结果

 #  <3>get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

 #-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------

 #  <4>values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

 #  <5>exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象

 #  <6>order_by(*field):      对查询结果排序

 #  <7>reverse():             对查询结果反向排序

 #  <8>distinct():            从返回结果中剔除重复纪录

 #  <9>values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

 #  <10>count():              返回数据库中匹配查询(QuerySet)的对象数量。

 # <11>first():               返回第一条记录

 # <12>last():                返回最后一条记录

 #  <13>exists():             如果QuerySet包含数据,就返回True,否则返回False。

惰性机制:

所谓惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行。

如果想要服务器控制台输出查询对应的sql语句可以在setting中加入:

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

四,模糊查询

 #    models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
#
# models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
# models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
#
# models.Tb1.objects.filter(name__contains="ven")
# models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
#
# models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and
#
# startswith,istartswith, endswith, iendswith,

ORM对多表进行增删改查(一对多)

一:增加记录

 #第一种方式
Book.objects.create(name="python",price=45,time="2015-12-03",publish_id=2) #第二种方式
publish_obj=Publish.objects.filter(name="人民出版社")[0]
Book.objects.create(name="python",price=45,time="2015-12-03",publish=publish_obj)

二:查询记录

 #第一种:通过对象(查询人民出版社出版的书籍)
#正向查询
publish_obj=Publish.objects.filter(name="人民出版社")[0]
res=Book.objects.filter(publish=publish_obj).values("name","price") #反向查询(根据出版社找所有该出版社出版的书籍)
publish_obj=Publish.objects.filter(name="人民出版社")[0]
res=publish_obj.book_set.all().values("name","price") #第二种:万能的双下划綫(查询人民出版社出版过的书籍)
#正向查询
res=Book.objects.filter(public__name="人民出版社").values("name")
#反向查询
res=Publish.objects.filter(name="人民出版社").values("book__name")

Django-ORM增删改查的更多相关文章

  1. 饮冰三年-人工智能-Python-24 Django ORM增删改查

    一:首先使用默认的sqlite3创建表 1:现在在models.py中添加表模型 from django.db import models # Create your models here. cla ...

  2. django ORM 增删改查 模糊查询 字段类型 及参数等

    ORM 相关 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (), gen ...

  3. Django框架(三)—— orm增删改查、Django生命周期

    目录 orm增删改查.Django生命周期 一.orm介绍 二.orm增删改字段 三.Django生命周期 orm增删改查.Django生命周期 一.orm介绍 1.什么是orm ORM即Object ...

  4. ORM增删改查并发性能测试2

    前言 上一篇<ORM增删改查并发性能测试>出现了点小失误,有的输出SQL日志的代码没有禁用,数据库连接字符串可能有问题.统一环境,统一代码后,重新写一篇. 这次重点是并发性能测试,真不是为 ...

  5. $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期

    1 orm介绍  ORM是什么   ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM.  一 ...

  6. Django 自带的ORM增删改查

     通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加 ...

  7. Django框架(三)-- orm增删改查、Django生命周期

    一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...

  8. day054 组件 CBV FBV 装饰器 ORM增删改查

    组件: ​ 把一小段HTML 放在一个HTML中 nav.html ​ 使用: ​ {% include ‘nav.html ’ %} 一. FBV 和CBV 1.FBV(function base ...

  9. ORM增删改查

    目录 orm django 连接mysql顺序 1 settings配置文件中 2 项目文件夹下的init文件中写上下面内容, 补充 3 models文件中创建一个类(类名就是表名) 4.执行数据库同 ...

  10. beego 初体验 - orm - 增删改查

    本文记录一下 beego orm 简单的增删改查,大牛请绕道. 首先,注册4个增删改查的路由: 其次,在 views 文件夹下增加对应的模板(页面): controller 类里写上增删改查的方法: ...

随机推荐

  1. android点击返回键,如何做到不destory当前activity,只是stop。重新返回该activity的 时候可以直接使用,不需要创建新的activity实例

    问题描述,如题目: android点击返回键,顺序执行 pause,stop,destory. 以至于想重新进入这个activity的时候还要重新执行onCreate()方法,那么如何解决不再重新执行 ...

  2. KNN算法思想与实现

    第二章 k近邻 2.1 算法描述 (1)采用测量不同特征值之间的距离进行分类 优点:对异常点不敏感,精度高,无数据输入设定 缺点:空间,计算复杂度高 适合数据:标称与数值 (2)算法的工作原理: 基于 ...

  3. [Micropython]TPYBoard v10x MFRC522智能门禁系统

    MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员.也就是射频卡. 经常忘带钥匙,最尴尬的上周竟然去开4楼的门,(家住五楼,无电梯),开了好一会没打开,事后对4楼 ...

  4. C#读取shp文件并获取图形保存到sde要素类中(不使用ESRI的类库,纯c#实现)

    说明:首先要将sde要素类发布成对应的要素服务,通过对要素服务的操作,实现数据在sde要素类中的增删 //向服务器发出请求 public string getPostData(string postS ...

  5. JAVA未来前景还能持续多久

    有很多人一直在说JAVA现在已经饱和了,已经没有必要学Java,程序员已经是严重过剩,行业人才竞争状况更是恶性的之类的云云.现实真是这样嘛? Java目前现状 首先,Java的应用可以说是无处不在,从 ...

  6. [Java算法分析与设计]--线性结构与顺序表(List)的实现应用

    说到线性结构,我们应该立马能够在脑子里蹦出"Array数组"这个词.在Java当中,数组和对象区别基本数据类型存放在堆当中.它是一连串同类型数据存放的一个整体.通常我们定义的方式为 ...

  7. Java多线程:线程与进程

    实际上,线程和进程的区别,在学OS时必然是学习过的,所缺的不过是一些总结. 1. 进程 2. 线程 3. 进程与线程 4. 多进程与多线程对比 5. Java多进程与多线程 5.1. Java多进程 ...

  8. 用C++实现一个不能被继承的类

    #include<iostream> using namespace std; class Gradpa { friend class Parent;//声明public或者private ...

  9. spring boot入门篇,helloworld案例演示

    为什么用spring boot? 嵌入的 Tomcat,无需部署 WAR 文件 简化 Maven 配置 无需 XML 配置,轻松快速地搭建Spring Web应用 开始学习SpringBoot 构建简 ...

  10. 读取本地outlook邮件内容

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...