【背景】
增/删/改/查 如何操作数据库
导入数据库的模型
In [23]: from blog.models import People
【增加记录】--三种方法
方法一: 直接使用数据模对象的create函数
In [24]: People.objects.create(name='shuaige')
Out[24]: <People: People object>
注意:创建成功返回对象地址
方法二:
In [6]: record = People(name='choubaguai')
In [7]: record.save()
方法三:
In [9]: record = People()
In [10]: record.name ='andy'
In [11]: record.save()
【删除记录】--找对对象,使用delete() 进行删除
第一找出你要删除的对象集合(id大于2的)
In [19]: r_d = People.objects.filter(id__gt =2)
使用delete对象将其删除
In [20]: r_d.delete()
Out[20]: (3, {'blog.People': 3})
将返回珊瑚的条目数
【改记录】-先找出来,在将对象属性重新赋值
(将id=1的名字改成andyliu)
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()
如果要获取对象值,需要先取出某一个对象,然后取出对象中的属性
In [32]: for record in all_record:
....: print(record.id)
....: print(record.name)
....:
1
andyliu
2
zhangxueyou
2 获取某个域为指定值的对象
In [11]: r_p = People.objects.get(name='zhangxueyou')
In [12]: r_p.id
Out[12]: 2
注意: 这个用法不常用,如果要用,你一定要保证,你查找的一定存在这样的一个记录,且必须是唯一,不然会报错哦
3 类似mysql中where进行的条件查询使用filter函数
第一: 整数的范围比较查询()
将id大于1的对象找出来,并以值列表的形式进行返回
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). |
In [16]: People.objects.filter(name__in=['andyliu','zhangxueyou'])
Out[16]: [<People: People object>, <People: People object>, <People: People object>]
4 多过滤条件查询,有一种方法是,多次使用filter函数即可
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
符合条件的长度
In [24]: People.objects.filter(name='andyliu').count()
Out[24]: 2
6 order_by()函数,进行升序/降序
-负数表示要进行降序排序
In [14]: p = People.objects.order_by('-id')
In [15]: for i in p:
print(i.id)
....:
6
2
1
7 in list
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,除外来等价
In [16]:
Person.objects.exclude(id__in = [1,2]).values_list()
Out[16]: [(3,
'name3', 22), (4, 'name3', 22)]
9. 包含关键字的(集合链式查询)
表中的所有数据:
In [20]: Person.objects.values_list()
Out[20]: [(1, 'name1', 23), (2, 'name2', 22), (3, 'name3', 22), (4, 'name3', 22)]
name这个field包含name的关键字的record记录
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的! 使用链式查询
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岁的
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. 哈哈接下来可能是关于时间的查询(待续)
转载于:https://blog.51cto.com/cuidehua/1776023