zoukankan      html  css  js  c++  java
  • django中的Q和F方法

    一、Q方法

    1.对关键字参数进行封装:

    from django.db.models import Q
    from app01.models import Userinfo
     
    userinfo = Userinfo.objects.filter(Q(question__startswith=''))

    2.&,| 操作符

    当一个操作符作用于两个Q对象时,会产生一个新的Q对象:

    from django.db.models import Q
    from app01.models import Userinfo
     
    userinfo = Userinfo.objects.filter(Q(question__startswith='') | Q(question__startswith=''))

    3.Q对象可以用~操作符表示否定

    from django.db.models import Q
    from app01.models import Userinfo
     
    userinfo = Userinfo.objects.filter(Q(question__startswith='') | ~Q(born_data__year=2005))

    4.与关键字参数查询一起使用

    一定要把Q对象放在关键字参数查询的前面

    Order.objects.get(
        Q(create_time=date(2018, 10, 3)) | Q(create_time=date(2019, 3, 6))
        desc__startswith='wang',
    )

    例:

    Book.objects.get(
    Q(username__startswith='t'),
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
    )
    等价于
    SELECT * from book WHERE username LIKE 't%'
    AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')

    二、F方法

    F()的作用是:在更新数据时先从数据库里将原数据取出后方在内存里,然后修改相应的字段的值,最后提交。

    book = Book.objects.get(publish='电子工业出版社')
    book.price += 1
    book.save()

    转化为sql语句为

    UPDATE `book` SET ..., `price` = `orice` + 1 WHERE `book`.`publish` = '电子工业出版社'

    使用F()函数:

    from django.db.models import F
    from app01.models import Book
     
    book = Book.objects.get(price='128')
    book.price = F('price') - 1
    book.save()

    上述方法更新过数据之后需要重新加载数据来使数据库中的值与程序中的值对应

    book= Book.objects.get(pk=book.pk) 
     
    #  或者使用更加简单的方法:
     
    book.refresh_from_db()
  • 相关阅读:
    查看mysql版本的四种方法及常用命令
    newInstance和new的区别(good)
    Citrix 服务器虚拟化之六 Xenserver虚拟机创建与快照
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 排序
    Java实现 蓝桥杯 算法训练 2的次幂表示
    Java实现 蓝桥杯 算法训练 2的次幂表示
    Java实现 蓝桥杯 算法训练 前缀表达式
    Java实现 蓝桥杯 算法训练 前缀表达式
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/11232353.html
Copyright © 2011-2022 走看看