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. cf688B-Lovely Palindromes

    http://codeforces.com/problemset/problem/688/B B. Lovely Palindromes time limit per test 1 second me ...

  2. Codeforces #505(div1+div2) B Weakened Common Divisor

    题意:给你若干个数对,每个数对中可以选择一个个元素,问是否存在一种选择,使得这些数的GCD大于1? 思路:可以把每个数对的元素乘起来,然后求gcd,这样可以直接把所有元素中可能的GCD求出来,从小到大 ...

  3. java中什么是代码点,什么是代码单元?

    1.代码点&代码单元,是从Unicode标准而来的术语,Unicode标准的核心是一个编码字符集,它为每一个字符分配一个唯一数字.Unicode标准始终使用16进制数字,并且在书写时在前面加上 ...

  4. Luogu 4151 [WC2011]最大XOR和路径

    你谷又乱评分…… 首先发现答案只有可能是从$1$开始走到$n$,中间绕若干个环,然后使它取到的异或值最大. 这样子的话我们可以随便先取一条路径,强制选择走这条路径,然后把所有的环都丢进线性基里面去,因 ...

  5. java8的十大新特性

    推荐学习的博客: http://blog.csdn.net/renfufei/article/details/24600507/-------讲解的非常通俗易懂 http://blog.csdn.ne ...

  6. React 和 Redux理解

    学习React有一段时间了,但对于Redux却不是那么理解.网上看了一些文章,现在把对Redux的理解总结如下 从需求出发,看看使用React需要什么 1. React有props和state pro ...

  7. C++笔记--指针数组和结构

    指针 类型为T*的变量能保存一个类型T对象的地址 Char c=‘a’:Char * p=& c://保存了c的地址 指针的操作一般都是间接的引用,就是相当于引用指针所指的对象. 0是一个特殊 ...

  8. Android 中 吐司显示不出来的原因分析

    当你发现你的toast的show方法的确被执行了,但是却没有在界面中显示出来, 有问题的地方可能有两点: 1.Context上下文对象有问题,不是当前的上下文对象或者什么的: 2.message(即T ...

  9. Java50道经典习题-程序39 分数累加

    题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n import java.util.Scanner; public ...

  10. JavaScript面向对象编程入门

    来源极客网 function Person() { var _this = {} //创建一个空的对象,接着我们利用这个"空的对象"承载Person的属性和方法 _this.say ...