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()
  • 相关阅读:
    [LeetCode]78. Remove Nth Node From end of List删除链表中倒数第N个节点
    [LeetCode]77. Reverse Linked List反转链表
    [LeetCode]76. Permutation Sequence全排列序列
    [LeetCode]75. Pow(x,n)幂运算
    粘连字符分割初探~~
    验证码识别学习~~
    用VS2010编C#程序扫盲 2
    用VS2010编C#程序扫盲
    验证码降噪方法汇总~~~~~
    新生活......
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/11232353.html
Copyright © 2011-2022 走看看