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()
  • 相关阅读:
    sublimetext ruby 插件
    [C]goto statement, rarely been used. Deprecated???
    [C]union
    [C] Struct Test
    [C,Java,Python]Command Line Argument: argv, argc, sys.argv, args
    [Python]**otherInfo, *other
    [C]parameterized macros 带参数的宏
    [C]指针与结构变量
    [C]结构变量传递给函数
    [C]结构变量数组array of structure varibles
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/11232353.html
Copyright © 2011-2022 走看看