Model中的F

  F 的操作通常的应用场景在于:公司对于每个员工,都涨500的工资。这个时候F就可以作为查询条件

from django.db.models import F
models.UserInfo.objects.filter().update(salary=F('salary')+500)
# F('salary')就表示salary在这行记录中的值。

  F的使用场景基本就是这样,比较简单。

Model中的Q

  Q 的操作通常的应用场景在于:构造搜索条件。

  普通filter搜索条件支持三种传参方式:1. 传具体参数  2.传字典  3.传Q对象。具体例子如下

1. 传具体参数

models.UserInfo.objects.filter(id=3,name='Bob')

2. 传字典

dic = {'id':3,'name':'Bob'}
models.UserInfo.objects.filter(**dic)

3. 传Q对象--通常会用在进行构造组合搜索

步骤显示:

类型一: 构建简单搜索条件
# 1. 导入Q模块
from django.db.models import Q
# 2. 传入条件进行查询
q1 = Q() # 创建Q对象实例
q1.connector = 'OR' # 多个条件之间以or形式连接
q1.children.append(('id', 1))
q1.children.append(('id', 2))
q1.children.append(('id', 3)) models.Tb1.objects.filter(q1) # 传入简单的Q对象进行查询,每个查询条件之间以or连接
#--------------------------------------------------------------------------------#
类型二:构建复杂搜索条件
# 1. 导入Q模块
from django.db.models import Q
# 2. 创建Q对象实例
con = Q()
# 3. 创建条件q1
q1 = Q()
q1.connector = 'OR'
q1.children.append(('id', 1)) # 这三个条件以or的形式连接
q1.children.append(('id', 2))
q1.children.append(('id', 3)) # 4. 创建条件q2
q2 = Q()
q2.connector = 'OR'
q2.children.append(('status', '在线'))
# 5. 指定不同搜索条件之间以and还是or来连接
con.add(q1, 'AND')
con.add(q2, 'AND') # 表示q1与q2之间通过and来连接 models.Tb1.objects.filter(con) #传入复杂Q对象进行搜索

Python菜鸟之路:Django 数据库操作进阶F和Q操作的更多相关文章

  1. Django 数据库操作进阶F和Q操作

    Model中的F F 的操作通常的应用场景在于:公司对于每个员工,都涨500的工资.这个时候F就可以作为查询条件 1 2 3 from django.db.models import F models ...

  2. Python菜鸟之路:sqlalchemy/paramiko进阶

    前言:ORM中的两种创建方式 数据库优先:指的是先创建数据库,包括表和字段的建立,然后根据数据库生成ORM的代码,它是先创建数据库,再创建相关程序代码 代码优先:就是先写代码,然后根据代码去生成数据库 ...

  3. django操作数据库之查询F,Q操作 和 seach搜索功能

    # F 使用查询条件的值 # # from django.db.models import F # models.Tb1.objects.update(num=F('num')+1) # Q 构建搜索 ...

  4. Python菜鸟之路:Django 路由补充1:FBV和CBV - 补充2:url默认参数

    一.FBV和CBV 在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view ...

  5. Python菜鸟之路:Django 路由、模板、Model(ORM)

    Django路由系统 Django的路由系统让Django可以根据URI进行匹配,进而发送至特定的函数去处理用户请求.有点类似nginx的location功能. Django的路由关系分为三种:普通关 ...

  6. Python菜鸟之路:Python基础-操作缓存memcache、redis

    一.搭建memcached和redis 略,自己去百度吧 二.操作Mmecached 1. 安装API python -m pip install python-memcached 2. 启动memc ...

  7. Python菜鸟之路:Django 信号

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 相当于我们创建了一个hook. 1. Django的内置信号 Mo ...

  8. Python菜鸟之路:Python基础-Socket编程-2

    在上节socket编程中,我们介绍了一些TCP/IP方面的必备知识,以及如何通过Python实现一个简单的socket服务端和客户端,并用它来解决“粘包”的问题.本章介绍网络编程中的几个概念:多线程. ...

  9. Django 之 models的 F() 和 Q() 函数

    前提: app名称为core,models.py 如下: #coding: utf8 import datetime from django.db import models class Order( ...

随机推荐

  1. hibernate 继承映射关系( TABLE_PER_CLASS)

    Person,Student,Teacher各创建一个表,主键用一个中间表生成.   package com.bjsxt.hibernate; import javax.persistence.Ent ...

  2. Failed to read auto-increment value from storage engine

    今天在使用php artisan db:seed进行填充1000条数据时,出现如下错误Failed to read auto-increment value from storage engine 原 ...

  3. (016)给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树(keep it up)

    给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树. 因为数组是递增有序的.每次都在中间创建结点,类似二分查找的方法来间最小树. struct TreeNode { int data; Tr ...

  4. centos/rhel下实现nginx自启动脚本实例

    1. 建立脚本文件nginxd [root@could]# vi /etc/init.d/nginxd 插入以下内容   #!/bin/bash # # chkconfig: - 85 15 # de ...

  5. 一篇关于arc下内存管理的老文章,包含各种冷门修饰符(关于内存),写的较好,mark

    http://blog.csdn.net/zhibudefeng/article/details/7746201

  6. C语言基础(15)-多文件编译

    一.头文件的使用 如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,那么就需要在第一个文件中声明函数原型.如果把函数原型包含在一个头文件里,那么就不必每次使用函数的时候都声明其原型了 ...

  7. cf #363 b

    B. One Bomb time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  8. 敏捷开发 scrum管理

    项目准备阶段 1.产品经理将整体项目拆分成不同的单独模块,每个模块尽量细化到能够自成一体.例如app的登录注册模块,不能仅仅就是登录注册这两个界面,而是要将所有与这有关的需求整合到一块.要达到的效果就 ...

  9. IOS设计模式浅析之单例模式(Singleton)

    说在前面 进入正式的设计模式交流之前,扯点闲话.我们在项目开发的过程中,经常会不经意的使用一些常见的设计模式,如单例模式.工厂方法模式.观察者模式等,以前做.NET开发的时候,认真拜读了一下程杰老师的 ...

  10. Ocelot + IdentityServer4 坑自己

    现像是 connect/userinfo 可以访问 但是api都提示401 后面发现是在appsettings.json "Options": {"Authority&q ...