Django中的单表操作

1.精确查询

#查询的结果返回是容器Query Set的函数(Query Set模型类)

# 1. all()   查询的所有的符合条件的结果,支持正向索引,支持索引切片,不支持反向索引

user_list = User.objects.all()
print(type(user_list))
print(user_list)
print(user_list.query)
user = User.objects.all()[0]  # [User: ming]
user1 = User.objects.all()[-1]  # 不支持AssertionError: Negative indexing is not supported.
user2 = User.objects.all()[0:2]  # <QuerySet [<User: [User: ming]>, <User: [User: xian]>]>

# 2. exclude(**kwargs) 查询满足条件对应额对立面的所有结果的list

user3 = User.objects.exclude(id=2)
# 该函数相当于将满足条件的记录剔除后返回其他所有记录。    

# 3. order_by(*field) 查询按照指定的字段条件进行排序后的结果, 'tag_name'代表正序,'-tag_name'代表反序。

user4 = User.objects.order_by('id')
print(user4)

# Query Set 是一个储存查询记录的容器,具备列表的一些操作接口,可以被迭代
for i in user4:
   print(i)
   
# 4. reverse() 反转查询结果
user5 = User.objects.all().reverse()
# 将查询结果反转

# 5. count() 显示查询结果的记录的条数,也就是Query Set容器中数据的条数

n = User.objects.all().reverse().count()
print(n)

# 6. exists() 判断查询结果是否存在,值为布尔类型

res = User.objects.filter(id=7).exists()
print(res)

False
(0.000) SELECT (1) AS `a` FROM `app_user` WHERE `app_user`.`id` = 7 LIMIT 1; args=(7,)

# 7. values(*field) 按照指定的字段们进行查询,返回存放包含字段们的字典的QuerySet

user = User.objects.values('name', 'age')
print(user)

#对应的sql:   SELECT `app_user`.`name`, `app_user`.`age` FROM `app_user` LIMIT 21; args=()

<QuerySet [{'name': 'ming', 'age': 25}, {'name': 'xian', 'age': 26}, {'name': 'daidai', 'age': 58}, {'name': 'jeans', 'age': 23}, {'name': 'tenny', 'age': 26}]>

# 8 values_list(*field) 同values类似,但是返回的记录是以元组存放在Query Set中

user = User.objects.values_list('name', 'age')
print(user)
<QuerySet [('ming', 25), ('xian', 26), ('daidai', 58), ('jeans', 23), ('tenny', 26)]>
(0.000) SELECT `app_user`.`name`, `app_user`.`age` FROM `app_user` LIMIT 21; args=()

# 9 distinct(*field) 将其他的查询结果剔除重复的字段,括号内是字段名
user = User.objects.values('name', 'age').distinct('name')

2.用manger类实现的增删查改

# 增
user = User.objects.create(name='xiaojin', age=24, birthday='2018-12-12')
print(type(user))
print(user)
# <class 'app.models.User'>
# [User: xiaojin]

user = User(name='Zero', age=8, birthday='2010-06-01')
user.save()

# 查
# 操作的结果拥有是一个list
users = User.objects.filter(name='Owen')

# 只能操作有且只有一条数据的记录
user = User.objects.get(id=1)

#改
User.objects.filter(name='Owen').update(name='Owen_best')

users = User.objects.filter(name='Owen_best')
for user in users:
   user.name = 'Owen'
   user.save()
   
#删
User.objects.filter(name='Owen').delete()

user = User.objects.filter(name='Zero').first()
user.delete()

3.模糊查询

user_list = User.objects.filter(id__gte=1)

# 整型相关
age__exact=8  # 确切匹配8
age__in=[8, 10]  # 8或10
age__gt=8  # 大于8
age__gte=8  # 大于等于8
age__lt=8  # 小于8
age__lte=8  # 小于等于8
age__range=[8, 10]  # 8到10之间
age__isnull=0|1  # 0:is not null | 1:is null

# 字符串相关
name__startswith  # 后方模糊匹配
name__endswith  # 前方模糊匹配
name__contains  # 前后方均模糊匹配
name__regex  # 正则匹配
name__istartswith  # 不区分大小写后方模糊匹配(i开头就是不区分大小写)

# 时间相关
birthday__year=2008  # 时间年份模糊匹配

4.特殊字查询(F、Q查询)

# 特殊字的查询首先要导入django中的模型类中的F,Q
from django.db.models import F,Q

# F查询(计算查询,基于计算的)
# 需求一:将所有人的年龄加1
User.objects.all().update(age=F('age')+1)

# 需求二:将所有年龄的1/4等于id的记录查询出来
res = User.objects.filter(id=F('age')/4).exists()

# Q查询
# Q基于关系 Q('字段条件')
# 与
User.objects.filter(Q(id=1) & Q(age=10))  # id=1 并且 age=10
# 或
User.objects.filter(Q(id=1) | Q(id=2))  # id=1 或 id=2
# 非
User.objects.filter(~Q(id=1))  # id 不为 1

Django中manger/QuerySet类与mysql数据库的查询的更多相关文章

  1. 在django中使用orm来操作MySQL数据库的建表,增删改

    多张表之间的三种关系:一对一,一对多,多对多 创建表 一对一 xx = models.OneToOneField(to='表明',to_field='字段名',on_delete=models.CAS ...

  2. Sql Server中的数据类型和Mysql中的数据类型的对应关系(转)

    Sql Server中的数据类型和Mysql中的数据类型的对应关系(转):https://blog.csdn.net/lilong329329/article/details/78899477 一.S ...

  3. jmeter中通过jdbc方式连接mysql数据库的配置参考

    jmeter中通过jdbc方式连接mysql数据库的配置参考: Database URL=jdbc:mysql://ip:port/dbname?useUnicode=true&allowMu ...

  4. Mysql数据库使用量查询及授权

    Mysql数据库使用量查询及授权 使用量查询 查看实例下每个库的大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2 ...

  5. MySQL数据库的查询缓冲机制

    MySQL数据库的查询缓冲机制 2011-08-10 11:07 佚名 火魔网 字号:T | T 使用查询缓冲机制,可以极大地提高MySQL数据库查询的效率,节省查询所用的时间.那么查询缓冲机制是怎样 ...

  6. MySql数据库慢查询

    一.什么是数据库慢查询? 数据库慢查询,就是查询时间超过了我们设定的时间的语句. 可以查看设定的时间: 默认的设定时间是10秒.也可以自己根据实际项目设定. set long_query_time=0 ...

  7. DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户

    1. DAO简介    DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性. 2. DAO各部分详解    DAO设计模式包括5个重要的部分,分别为数据 ...

  8. Ecplise 中 加载JDBC 连接 Mysql 数据库读取数据

    准备工作 首先下载 JDBC 驱动,下载地址https://www.mysql.com/products/connector/ 将压缩包解压得到文件 mysql-connector-java-5.1. ...

  9. 在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合

    在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的 ...

随机推荐

  1. What You Can Learn from Actifio Logs

    The Actifio services generate many logs, some of which are useful for troubleshooting. This section ...

  2. 转载一篇阿里云Terraform 开发指南

    连接:https://www.jianshu.com/p/0aebea117cae 是一个比较详细的开发指南          

  3. ubuntu升级显卡驱动

    2.驱动安装  参考:http://blog.csdn.net/Zafir_410/article/details/73188228 2.1 卸掉已安装的驱动 1 sudo apt-get purge ...

  4. py-day4-4 python 其他内置函数

    # ascii码转换 print(chr(98)) 结果: b print(ord('b')) 结果: 98 # 求几的几次方 print(pow(2,3)) # 2**2 =2*2*2 结果: 8 ...

  5. 详解java定时任务---Timer篇

    一.简介      在java的jdk中提供了Timer.TimerTask两个类来做定时任务. Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,而TimerTask一个抽象类,它的子 ...

  6. rocketmq(三 java操作rocket API, rocketmq 幂等性)

    JAVA操作rocketmq: 1.导入rocketmq所需要的依赖: <dependency> <groupId>com.alibaba.rocketmq</group ...

  7. [转][C#]服务安装卸载命令

    c:\windows\microsoft.net\Framework\v2.0.50727\installutil.exe  [/u] X:\服务.exe

  8. 20175236 2018-2019-2 《Java程序设计》第六周学习总结

    教材学习内容总结 第七章 try :用于监听.将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出. catch:用于捕获异常.catch用来捕获try ...

  9. crf++实现中文分词简单例子 (Windows crf++0.58 python3)

    学习自然语言处理的同学都知道,条件随机场(crf)是个好东西.虽然它的原理确实理解起来有点困难,但是对于我们今天用到的这个crf工具crf++,用起来却是挺简单方便的. 今天只是简单试个水,参考别人的 ...

  10. 线程相关的sleep()、yield()、wait()、join()方法介绍

    1.Thread.sleep()与Thread.yield()都会暂缓当前线程执行,转为执行其他线程(忽略优先级),如果持有锁,则不会释放. 2.Thread.sleep()可以精确指定休眠的时间,而 ...