F查询:代表2个字段之间的比较

from django.db.models import F

models.Book.objects.filter(price__gt=F('keep_price'))

也可以在F()后面进行运算,不过只能对数字

models.Book.objects.filter(price__gt=F('keep_price')+50)

如果对字符串进行修改操作呢?

要用到2个方法:

from django.db.models.functions import Concat

from django.db.models import Value

models.Book.objects.all().update(title=Concat(F('title'),Value(''(''),Value('第一'),(''),'')))

Q方法:

执行更复杂的语句,比如OR,

models.Book.objects.filter(Q(author__name='小仙女')|Q(author__name='小魔女'))

可以用AND和 |  操作符以及使用括号进行分组来编写任意复杂的Q对象,亦可以用~ 对Q对象进行取反操作

例如:查询作者名字是小仙女并且不是2018年出版的书的书名。

models.Book.objects.filter(Q(author__name='小仙女')& ~Q(publish_date__year=2018).values_list('title'))

查询时可以混用Q对象和关键字参数,用逗号分隔,取交集,但Q对象要在关键字参数前面。!!!!

查询出版年份是2018或2017年,书名带物语的书

models.Book.objects.filter(Q(publish_date__year=2018) | Q(pulisher_date__year=2017),title__contains='物语')

事务:和数据库事务一个概念,值是一起改变的,一方失败,则数据不变

固定格式如下:

try:

  from django.db import transaction

  with transaction.atomic():

    new_publisher=models.Publisher.objects.create(name='火星出版社')

    models.Book.objects.create(title='橘子物语',publish_date=datetime.date.today(),

    publisher_id=10)

except Exception as e:

  print(str(e))

update是对queryset对象进行操作,save是对对象进行操作,

update是更新某一字段,效率更高,save是更新所有字段,效率低一点

补充:

  1.select_related 和 prefetch_related

    1.select_related 利用SQL的JOIN来减少查询数据库的次数

    2.prefetch_related 利用 Python 来做类似JOIN操作

   

3.ORM执行原生SQL的方法:

  1. extra

    查询书籍名称和出版时间(年月)

    ret=models.Book.objects.all().extra(select={'zhangzhao':''Date_FORMAT(publish_date,'%%Y-%%M')''}).value('title','zhangzhao')

    将书籍按年月归档

    from django.db.models import Count

    ret=models.Book.objects.extra(select={'zhangzhao':'DATE_FORMAT(publish_date,"%%Y-%%M")'})

   

  2.类似pymysql方式

    from django.db import connection

    cursor=connection.cursor()   ## cursor = connections['default'].cursor()

    cursor.execute(""" SELECT * from app01_book where id=%s""",[1])

    row=cursor.fetchone()

    print(row)

    

Django ORM 最后操作的更多相关文章

  1. Django 2.0 学习(16):Django ORM 数据库操作(下)

    Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...

  2. Django 2.0 学习(14):Django ORM 数据库操作(上)

    Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...

  3. Django ORM models操作

    title: Django ORM models操作 tags: Django --- Django ORM models操作 Django ORM基本操作 一.数据库的创建及增删改查 1 使用类创建 ...

  4. Django ORM 数据库操作

    比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 ...

  5. Django学习笔记之Django ORM相关操作

    一般操作 详细请参考官方文档 必知必会13条 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> ...

  6. Django ORM哪些操作

    一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 ...

  7. Django ORM 事务操作

    事务 把一些列的操作(步骤)当作一个事务 全部的步骤都成功才成功 经典例子:银行转账 代码实现: import os if name == 'main': os.environ.setdefault( ...

  8. django ORM数据库操作

    5.使用Django的ORM详细步骤: 1. 自己动手创建数据库 create database 数据库名; 2. 在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库) # ...

  9. Django orm查询操作

    基于双下划线查询切记!!!!正向查询按字段,反向查询按表名的小写 正向:在Book表里设置关联Obj表,Book------>Obj就是正向查询 反向:在Book表里设置关联Obj表,Obj-- ...

随机推荐

  1. 在JAVA中,String,Stringbuffer,StringBuilder 的区别

    首先是,String,StringBuffer的区别 两者的主要却别有两方面,第一是线程安全方面,第二是效率方面 线程安全方面: String  不是线程安全的,这意味着在不同线程共享一个String ...

  2. pageBean实现分页

    PageBean类 package com.xujingyang.domain ; import java.util.List ; /** * @author oldmonk * @date 2017 ...

  3. Switch/Case 的穿透性

    /*键盘录入1到12 ,对应输出该月份对应的季节 .如果输入的不是1到12,输出提示信息:您输入的数据有误. PS: 春季:3,4,5月份 夏季: 6,7,8月份 秋季: 9,10,11月份 冬季:1 ...

  4. opencv新版本的数据结构

    转自 http://blog.csdn.net/yang_xian521/article/details/7108387 记得我在OpenCV学习笔记(四)——新版本的数据结构core里面讲过新版本的 ...

  5. boost::python开发环境搭建

    本来想用mingw编译boost::python模块,网上看了下资料太少,只有使用vs2012 操作环境:win7 x64 python: x86 boost: 1.57 编译boost::pytho ...

  6. UWP&WP8.1 基础控件——Image

    Image是UWP和WP8.1中系统自带的图片展示器. 具有较强的性能,使用也是非常的简单. 使用方式分为在XAML中,在C#代码中. XAML中: 在XAML中使用方式非常简单. 常用XAML So ...

  7. 不准使用xib自定义控制器view的大小

    1.AppDelegate.m // // 文 件 名:AppDelegate.m // // 版权所有:Copyright © 2018年 leLight. All rights reserved. ...

  8. 学习高性能mysql

    Mysql 的InnoDB存储引擎实现的不是简单的行级锁,实现的是MVCC,多版本并发控制,可以理解成行级锁的一个变种. InnoDB的MVCC是通过在每行纪录后面保存两个隐藏的列来实现的.这两个列, ...

  9. server2008 IIS7配置全过程(包括发布ASP网站)

    一.安装IIS 1.打开服务器管理器->角色->添加角色,选中WEB服务器(IIS),记得要把包括之后出现的ASP相关的东西都选中并安装,安装成功后,打开http://localhost/ ...

  10. wamp配置apache虚拟主机支持多域名访问localhost

    1.背景: 在进行网站开发的时候,通常需要以http://localhost或者127.0.0.1等地址来访问本地环境的网站.不过随着开发项目的增多,需要每次先访问localhost然后再选项目,显得 ...