django MySQL增删改查
发布时间:2018-10-23 17:56:02作者:wangjian浏览量:635点赞量:0
我们以一个user表为例,user有三个字段,一个是username、passwd、phone
下面的所有操作都需要映入user表的model
from Model.models import User
一:查
User.objects.all() #查询user中所有数据的对象集 User.objects.values('id','user_no') #查询user中指定字段数据与下面的结果相同 User.objects.all().values('id','user_no') #查询user中指定字段的所有数据与上面的结果相同 User.objects.filter(user_name='ceshi') #查询user中user_name为ceshi的所有数据对象集 User.objects.filter(user_name='ceshi').values('id','user_no','user_name') #查询user中user_name为ceshi的指定字段的所有数据 User.objects.get(id = 1) #查询id为1的一条数据对象,如果存在多条或不存在报错 (get查询不支持values属性) User.objects.get(id = 1).user_name #查询id为一的用户名,如果存在多条或不存在报错 User.objects.exclude(id=3) #查询所有id不等于所有数据 #排序 User.objects.order_by('-id') #查询按照id倒叙排序的结果集 User.objects.order_by('id') #查询按照id正序排序的结果集 User.objects.order_by('-id').values('user_name') #查询按照id倒叙排序的指定字段的所有数据 User.objects.order_by('id').valuse('user_name') #查询按照id正叙排序的指定字段的所有数据 #去重 User.objects.all().values('user_name').distinct() #查询user表中的所有user_name,并且user_name不重复 #数据总条数 User.objects.all().count() #查询所有数据的条数 User.objects.filter(user_name='ceshi').count() $查询user表中user_name为ceshi的条数 #给字段起别名 #需要引入F组件 from django.db.models import F User.objects.annotate(name = F('user_name')).values('name') #查询user表中的user_name字段并将user_name字段改为name名 contains查询 (模糊查询 区分大小写) User.objects.filter(user_name__contains = 'ceshi') #查询user表中username字段中包含ceshi的所有数据 User.objects.get(user_name__contains='ceshi') #查询user表中username字段中包含ceshi的一条数据,如果存在多条或不存在报错 icontains查询 (模糊查询 不区分大小写) User.objects.filter(user_name__icontains = 'ceshi') #查询user表中username字段中包含ceshi的所有数据 User.objects.get(user_name__icontains='ceshi') #查询user表中username字段中包含ceshi的一条数据,如果存在多条或不存在报错 __in查询 (存在于一个list范围内) User.objects.filter(id__in=[1,2,3]) #查询user表中id在1,2,3的所有数据 __range查询 (在...范围内) user = User.objects.filter(create_time__range = ['2018-01-01 00:00:00','2018-10-10 00:00:00'])
其他的一些查询条件这里不一一叙述了,有时间可以一一测试:
__exact 精确等于 like 'aaa' __iexact 精确等于 忽略大小写 ilike 'aaa' __contains 包含 like '%aaa%' __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。 __gt 大于 __gte 大于等于 __lt 小于 __lte 小于等于 __in 存在于一个list范围内 __startswith 以...开头 __istartswith 以...开头 忽略大小写 __endswith 以...结尾 __iendswith 以...结尾,忽略大小写 __range 在...范围内 __year 日期字段的年份 __month 日期字段的月份 __day 日期字段的日
Q查询:
Q()对象为了将多个查询条件组合起来,可以使用符号&或者|将多个Q()对象组合起来传递给filter(),exclude(),get()等函数。当多个Q()对象组合起来时,Django会自动生成一个新的Q(),Q()对象的前面使用字符“~”来代表意义“非”,使用Q对象时需要导入Q对象组件:
from django.db.models import Q
例:
user = User.objects.filter(Q(user_name = 'ceshi') & Q(id= 1)) #查询user表中user_name为ceshi并且id为一的数据
二:增
(1):
user=User() user.username=‘测试’ user.passwd= ‘123’ user.phone=‘123456789’ user.save()
(2):
user=User(username='测试',passwd='123',phonenumber='123456789') user.save()
三:删
# 删除一条username为‘ceshi’的记录 如果记录存在多条报错 User.objects.get(username='ceshi').delete() # 删除一组记录,假设一个电话号码可以对应多个user,现在要删除电话号码为‘123456789’的所有用户 User.objects.filter(phone='123456789').delete() # 删除所有数据 User.objects.all().delete()
四:改
把一条username为‘dw’的记录的手机号修改为‘88888’ 多条数据报错 user=User.objects.get(username='dw') user.phonenumber='88888' user.save() #把所有username为test的记录的手机号更新为123456 User.objects.filter(username='test').update(phone='123456') # 修改所有的列的phone为123456 User.objects.all().update(phone='123456')