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()
  • 相关阅读:
    Drop goldengate用户时报ORA-00604 ORA-20782 ORA-06512问题解决
    如何查看机器品牌型号
    ORA-28040:没有匹配的验证协议
    oracle 12C CDB下开启wallet
    mysql备份和恢复
    手工模拟vip切换
    半同步复制的安装部署
    linux下安装mysql5.7.11(二进制方式)
    postgrep创建存储过程例子
    Nginx 是前端工程师的好帮手
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/11232353.html
Copyright © 2011-2022 走看看