1312 发表于 2016-5-24 11:11:23

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

【背景】
增/删/改/查 如何操作数据库
导入数据库的模型

1
In : from blog.models import People




【增加记录】--三种方法
方法一: 直接使用数据模对象的create函数
In : People.objects.create(name='shuaige')   
Out: <People: People object>

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

1
2
In : record = People(name='choubaguai')   
In : record.save()





方法三:

1
2
3
In : record = People()
In : record.name ='andy'
In : record.save()





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

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

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




使用delete对象将其删除

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





将返回珊瑚的条目数


【改记录】-先找出来,在将对象属性重新赋值
(将id=1的名字改成andyliu)

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








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

1 获取所有记录对象

all_record = People.objects.all()      
如果要获取对象值,需要先取出某一个对象,然后取出对象中的属性

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






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

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





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


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

第一: 整数的范围比较查询()
将id大于1的对象找出来,并以值列表的形式进行返回

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







gt
大于
gte大于等于
lt小于
lte
小于等于
ne
不等于
in(也可以是其他数据类型)
位于给定列表中: People.objects.filter(id__in=) 返回一个 polls 列表(ID 值分别是 1或3或4).

1
2
In : People.objects.filter(name__in=['andyliu','zhangxueyou'])
Out: [<People: People object>, <People: People object>, <People: People object>]






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

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





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

In : People.objects.count()
Out: 3
等于:
In : People.objects.all().count()
Out: 3

符合条件的长度

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





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

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

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






7 in list

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





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

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





9. 包含关键字的(集合链式查询)
表中的所有数据:

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





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

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





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

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





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

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






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

In : Person.objects.all()
Out: [<Person: Person object>, <Person: Person object>]

In : Person.objects.all().values_list()
Out: [(2, 'name2', 22), (3, 'name3', 22)]

但是不知持负索引(会报错),如
Person.objects.all()[-1]




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


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




页: [1]
查看完整版本: Django的API操作mysql中常用的语句