使用ORM对Mysql操作
一、查询操作
classname.objects.all() = select * from table
返回对象数组,通过在类中定义__ str __(self)可以更改描述
classname.objects.values('列1','列2‘) = select 列1,列2 from table
返回一个一个字典数组[{'列1':value1,'列2':value2},。。。。。]
classname.objects.values_list('列1','列2‘) =select 列1,列2 from table
返回一个一个元组数组[(value1,value2),。。。。。]
classname.objects.order_by('列1') 按照升序(默认)或者降序排序,降序则在列名前加'-'号,返回对象数组
当然classname.objects.values_list('列1','列2‘).order_by('-列3')都是可以的,很灵活
在任意语句后调用query放回数据库语法解析形式
classname.objects.filter(属性1=值1,属性2=值2)
作用:返回包含此条件的全部的数据集返回值QuerySet容器对象
内部存放 MyModel实例,说明当多个属性在一起时同与关系
classname.objects.exclude(属性1=值1,属性2=值2)
作用:返回不包含此条件的全部的数据集返回QuerySet
classname.objects.get(条件)
作用:返回满足条件的唯一一条数据说明:该方法只能返回一条数据查询
- 结果多余←条数据则抛出Model. MultipleObjectsReturned异常查询结果
- 如果没有数据则抛出 Model DoesNotExist异常
如果是非等值的话,要用以下方法
查询谓词定义:做更灵活的条件查询时需要使用查询谓词说明:
每一个查询谓词是一个独立的查询功能_exact:
等值匹配示例:Author objects.filter (id_exact=1)
#等同于 select* from author where id=1
_contains:包含指定值: Author.objects.filter(name_contains='w')
#等同于 select* from author where name like'‰%
_startswith:以XXX开始
_endswith:以XXX结束
_gt:大于指定值
样例: Author.objects.filter( age_gt=50) #等同于 select from author where age>50
_gte:大于等于
_lt:小于
_lte:小于等于
_in:查找数据是否在指定范围内样例:
Author.objects.filter( Country.In=[中国,日本’,韩国”])
#等同于 select * from author where country in('中国’,'日本’,韩国)
_range:查找数据是否在指定的区间范围内样例:
#查找年龄在某一区间内的所有作者Author.objects.filter(age range=(35, 50))
#等同于 SELECT , WHERE Author BETWEEN 35 and 50 两个闭区别
二、更新操作
对于单个数据
一查二改三保存
一查:get方法获取属性对象
二改:对象.属性=赋值
三保存:对象.save()
批量更新数据
直接调用 QuerySet的 update(属性=值)实现批量修改
例 #将id大于3的所有图书价格定为0元 books = Book objects.filter(id_gt=3)
books.update(price=0)
#将所有书的零售价定为100元
books=Book objects.all()
books.update(market_price=100)
三、删除操作
对于单个数据
1查找查询结果对应的一个数据对象
2调用这个数据对象的 deleted方法实现删除
try:
auth= Author.objects.get(id=1)
auth.delete()
except:print(删除失败)
对于多个数据
1.查找查询结果集中满足条件的全部 QuerySet查询集合对象
2.调用查询集合对象的 deleted方法实现删除
#删除全部作者中,年龄大于65的全部信息
auth= Author.objects.filter(age_gt=65)
auth.delete()
不过实际项目中多用伪删除,表现为增加一个字段BooleanField用来表示是否显示数据,在获取数据的时候都需要判断一下
Comments NOTHING