zoukankan      html  css  js  c++  java
  • ORM其它查询

    F查询和Q查询

      当一般的查询已经无法满足我们的需求时,Django为我们提供了F和Q查询的复杂语句。假如,对数据库中所有人的年龄加一岁,该怎样查询?

      F查询

        F查询专门对对象中某列值的操作,不可使用_双下划线!

      Q查询

        Q()可以使orm的fifter()方法支持, 多个查询条件,使用逻辑关系(&、|、~)包含、组合到一起进行多条件查询

        Q查询可以组合使用“&”,“|”操作符,当一个操作符是用两个Q的对象,他产生了一个新的Q对象,Q对象可以用“~”操作符放在前面表示否定

        也可允许否定与不否定形式的组合。Q对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。

        语法:

          fifter(Q(查询条件1)| Q(查询条件2))

          fifter(Q(查询条件2)& Q(查询条件3))

          fifter(Q(查询条件4)& ~Q(查询条件5))

          fifter(Q(查询条件6)| Q(Q(查询条件4)& ~ Q(Q(查询条件5)& Q(查询条件3)))包含

        Q查询和非Q查询条件混合使用注意,不包括Q()的查询条件一点要放在Q(查询条件)后面

    分组和聚合查询

        1、aggregate(*args,**kwargs)  聚合函数

           通过对QuerySet进行计算,返回一个聚合值的字典。aggregate()中每一个参数都指定一个包含在字典中的返回值。即在查询集上生成聚合。

        2、annotate(*args,**kwargs)  分组函数

      extra

        extra针对的是复杂的SQL语句

        select select_params   

          1 v = models.UserInfo.objects.all().extra(select={
          2         'n': "select count(1) from app01_userinfo WHERE id>%s"
          3     },
          4     select_params=[1,]   # 有多个% 内部就有多个参数
          5     )
          6     print(v)
          7     for item in v:
          8         print(item.id,item.name,item.n)  # 这里使用n

        where params  

          1 models.UserInfo.objects.extra(
          2         where=["id=1","name='aaa'"]
          3     )
          4     models.UserInfo.objects.extra(
          5         where=["id=1 or id=%s ","name=%s"],
          6         params=[1,"aaa"]
          7     )

        tables

          1 models.UserInfo.objects.extra(
          2         tables=['app01_usertype'],
          3     )
          4 # """select * from app01_userinfo,app01_usertype"""
        总结:
           1 # a. 映射
           2     # select 
           3     # select_params=None
           4     # select 此处 from 表
           5 
           6 # b. 条件
           7     # where=None
           8     # params=None,
           9     # select * from 表 where 此处
          10 
          11 # c. 表
          12     # tables
          13     # select * from 表,此处
          14     
          15 # c. 排序
          16     # order_by=None
          17     # select * from 表 order by 此处
      原生SQL
        Django内部提供了写原生SQL的方法
         在setting中配置
         connection.cursor()默认是default数据
         cursor=connection['db2'].cursor()可以定义自己的数据库
            1 from django.db import connection, connections
            2 
            3 cursor = connection.cursor() #默认 connection=default数据库
            4 cursor = connections['db2'].cursor()
            5 
            6 cursor.execute("""SELECT * from auth_user where id = %s""", [1])# 写原生SQL
            7 
            8 row = cursor.fetchone()
            9 row = cursor.fetchall()  
     
          

        

        

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符删除
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
    Java实现 蓝桥杯VIP 算法训练 字符串编辑
  • 原文地址:https://www.cnblogs.com/jacky912/p/10450854.html
Copyright © 2011-2022 走看看