zoukankan      html  css  js  c++  java
  • Django ORM 最后操作

    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)

        

  • 相关阅读:
    MAVEN 配置阿里云源
    Windows10远程连接CentOS7(搭建Xrdp服务器)
    在jsp显示图片
    unbuntu自动任务定时重启
    eager模式与自定义训练
    JDK安装
    VMware克隆Linux虚拟机注意事项
    系统字符编码
    Iptables防火墙
    查看系统信息
  • 原文地址:https://www.cnblogs.com/zhaoweihang/p/9215299.html
Copyright © 2011-2022 走看看