【背景】
增/删/改/查 如何操作数据库
导入数据库的模型
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
i
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. 哈哈接下来可能是关于时间的查询(待续)