博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django的API操作mysql中常用的语句
阅读量:6344 次
发布时间:2019-06-22

本文共 3951 字,大约阅读时间需要 13 分钟。

【背景】

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

导入数据库的模型

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
你可能感兴趣的文章
nasm预处理器(2)
查看>>
二叉排序树 算法实验
查看>>
Silverlight 5 beta新特性探索系列:10.浏览器模式下内嵌HTML+浏览器模式下创建txt文本文件...
查看>>
YourSQLDba 配置——修改备份路径
查看>>
nginx web服务理论与实战
查看>>
java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码
查看>>
网易音乐版轮播-react组件版本
查看>>
ES6 - 函数与剩余运算符
查看>>
你对position了解有多深?看完这2道有意思的题你就有底了...
查看>>
WebSocket跨域问题解决
查看>>
ECMAScript6基本介绍
查看>>
世界经济论坛发布关于区块链网络安全的报告
查看>>
巨杉数据库加入CNCF云原生应用计算基金会,共建开源技术生态
查看>>
Ubuntu 16.04安装Nginx
查看>>
从 JS 编译原理到作用域(链)及闭包
查看>>
flutter 教程(一)flutter介绍
查看>>
CSS面试题目及答案
查看>>
【从蛋壳到满天飞】JS 数据结构解析和算法实现-Arrays(数组)
查看>>
每周记录(三)
查看>>
Spring自定义注解从入门到精通
查看>>