Django的API操作mysql中常用的语句

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

【背景】

增/删/改/查 如何操作数据库

导入数据库的模型

1
In [ 23 ]:  from  blog.models  import  People

【增加记录】--三种方法

方法一: 直接使用数据模对象的create函数

In [24]: People.objects.create(name='shuaige')    

Out[24]: <People: People object>


注意:创建成功返回对象地址

方法二:

1
2
In [ 6 ]: record  =  People(name = 'choubaguai' )    
In [ 7 ]: record.save()


方法三:

1
2
3
In [ 9 ]: record  =  People()  
In [ 10 ]: record.name  = 'andy'
In [ 11 ]: record.save()


【删除记录】--找对对象,使用delete() 进行删除


第一找出你要删除的对象集合(id大于2的)

1
In [ 19 ]: r_d  =  People.objects. filter (id__gt  = 2 )

使用delete对象将其删除

1
2
In [ 20 ]: r_d.delete()
Out[ 20 ]: ( 3 , { 'blog.People' 3 })


将返回珊瑚的条目数



【改记录】-先找出来,在将对象属性重新赋值

(将id=1的名字改成andyliu)

1
2
3
4
5
6
7
In [ 21 ]: People.objects.values_list()
Out[ 21 ]: [( 1 'liudehua' ), ( 2 'zhangxueyou' )]
In [ 22 ]: r_m  =  People.objects.get( id = 1 )
In [ 23 ]: r_m.name  =  'andyliu'
In [ 24 ]: r_m.save()
In [ 25 ]: People.objects.values_list()  
Out[ 25 ]: [( 1 'andyliu' ), ( 2 'zhangxueyou' )]





【查】 这就相当于mysql中sql语句中的select语句,其中有很多字语句进行限制查询


1 获取所有记录对象

all_record = People.objects.all()        

如果要获取对象值,需要先取出某一个对象,然后取出对象中的属性

1
2
3
4
5
6
7
8
In [ 32 ]:  for  record  in  all_record:
    ....:      print (record. id )
    ....:      print (record.name)
    ....:     
1
andyliu
2
zhangxueyou



2 获取某个域为指定值的对象

1
2
3
In [ 11 ]: r_p  =  People.objects.get(name = 'zhangxueyou' )       
In [ 12 ]: r_p. id
Out[ 12 ]:  2


注意: 这个用法不常用,如果要用,你一定要保证,你查找的一定存在这样的一个记录,且必须是唯一,不然会报错哦



3 类似mysql中where进行的条件查询使用filter函数


第一: 整数的范围比较查询()

将id大于1的对象找出来,并以值列表的形式进行返回

1
2
In [ 15 ]: People.objects. filter (id__gt = 1 ).values_list()
Out[ 15 ]: [( 2 'zhangxueyou' ), ( 6 'andyliu' )]



gt
大于
gte 大于等于
lt 小于
lte
小于等于
ne
不等于
in(也可以是其他数据类型)
位于给定列表中: People.objects.filter(id__in=[1, 3, 4]) 返回一个 polls 列表(ID 值分别是 1或3或4).
1
2
In [16]: People.objects.filter(name__in=['andyliu','zhangxueyou']) 
Out[16]: [<People: People object>, <People: People object>, <People: People object>]



4 多过滤条件查询,有一种方法是,多次使用filter函数即可

1
2
3
4
In [ 17 ]: People.objects. filter (id__gt = 1 ). filter (name = 'andyliu' )          
Out[ 17 ]: [<People: People  object >]
In [ 18 ]: People.objects. filter (id__gt = 1 ). filter (name = 'andyliku' )
Out[ 18 ]: []


5 查找到的对象数据(即符合条件的记录的数目)


In [25]: People.objects.count()

Out[25]: 3

等于:

In [26]: People.objects.all().count()  

Out[26]: 3


符合条件的长度

1
2
In [ 24 ]: People.objects. filter (name = 'andyliu' ).count() 
Out[ 24 ]:  2


6 order_by()函数,进行升序/降序


-负数表示要进行降序排序

1
2
3
4
5
6
7
In [ 14 ]: p  =  People.objects.order_by( '-id' )
In [ 15 ]:  for  in  p:                       
     print (i. id )
    ....:     
6
2
1



7 in list

1
2
3
4
In [ 15 ]:
Person.objects. filter (id__in  =  [ 1 , 2 ]).values_list()
Out[ 15 ]: [( 1 ,
'name1' 22 ), ( 2 'name2' 22 )]


8 not in list(这里没有直接的not in list) 但是可以使用exclude,除外来等价

1
2
3
4
In [ 16 ]:
Person.objects.exclude(id__in  =  [ 1 , 2 ]).values_list()
Out[ 16 ]: [( 3 ,
'name3' 22 ), ( 4 'name3' 22 )]


9. 包含关键字的(集合链式查询)

表中的所有数据:

1
2
In [ 20 ]: Person.objects.values_list()
Out[ 20 ]: [( 1 'name1' 23 ), ( 2 'name2' 22 ), ( 3 'name3' 22 ), ( 4 'name3' 22 )]


name这个field包含name的关键字的record记录

1
2
In [ 21 ]: Person.objects. filter (name__contains = "name" ).values_list()
Out[ 21 ]: [( 1 'name1' 23 ), ( 2 'name2' 22 ), ( 3 'name3' 22 ), ( 4 'name3' 22 )]


name这个field包含name的关键字的record记录并且年龄age字段不能等于23的! 使用链式查询

1
2
In [ 23 ]: Person.objects. filter (name__contains = "name" ).exclude(age = 23 ).values_list()
Out[ 23 ]: [( 2 'name2' 22 ), ( 3 'name3' 22 ), ( 4 'name3' 22 )]


以上需求用filter进行等价操作,取出22岁的

1
2
In [ 24 ]: Person.objects. filter (name__contains = "name" ). filter (age = 22 ).values_list()
Out[ 24 ]: [( 2 'name2' 22 ), ( 3 'name3' 22 ), ( 4 'name3' ,



10 对象索引,类似python 列表中的切片

In [29]: Person.objects.all()[1:3]

Out[29]: [<Person: Person object>, <Person: Person object>]


In [30]: Person.objects.all()[1:3].values_list()

Out[30]: [(2, 'name2', 22), (3, 'name3', 22)]


但是不知持负索引(会报错),如

Person.objects.all()[-1]



取代的方法:使用reverse方法来解决



11. 哈哈接下来可能是关于时间的查询(待续)

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1776023如需转载请自行联系原作者

cuizhiliang
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
182 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
7月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
541 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
7月前
|
搜索推荐 前端开发 数据可视化
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
本文介绍了一个基于Python协同过滤算法的旅游景点推荐系统,该系统采用Django框架、MySQL数据库、Bootstrap前端和echarts数据可视化技术,旨在为用户提供个性化的旅游推荐服务,提升用户体验和旅游市场增长。
759 9
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
|
7月前
|
存储 关系型数据库 MySQL
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
本文介绍了一个基于Python Django框架开发的医院管理系统,该系统设计了管理员、用户和医生三个角色,具备多用户功能,并使用MySQL数据库进行数据存储和管理。
317 4
基于python django 医院管理系统,多用户功能,包括管理员、用户、医生,数据库MySQL
|
8月前
|
关系型数据库 MySQL Go
go项目实现mysql接入以及web api
go项目实现mysql接入以及web api
63 0
|
8月前
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
109 0
|
8月前
|
文字识别 小程序 安全
印刷文字识别操作报错合集之微信小程序调用API时路径总是返回不对,该如何处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
8月前
|
文字识别 前端开发 API
印刷文字识别操作报错合集之通过HTTPS连接到OCR服务的API时报错,该如何处理
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
8月前
|
XML JSON 文字识别
印刷文字识别操作报错合集之API调用过程中报错469,是什么导致的
在使用印刷文字识别(OCR)服务时,可能会遇到各种错误。例如:1.Java异常、2.配置文件错误、3.服务未开通、4.HTTP错误码、5.权限问题(403 Forbidden)、6.调用拒绝(Refused)、7.智能纠错问题、8.图片质量或格式问题,以下是一些常见错误及其可能的原因和解决方案的合集。
|
8月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
72 2

热门文章

最新文章