设为首页 收藏本站
查看: 902|回复: 0

[经验分享] Django的API操作mysql中常用的语句

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-5-24 11:11:23 | 显示全部楼层 |阅读模式
【背景】
增/删/改/查 如何操作数据库
导入数据库的模型
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. 哈哈接下来可能是关于时间的查询(待续)





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-221106-1-1.html 上篇帖子: python socket 交互通信 下篇帖子: pyenv 环境构造多python环境 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表