您现在的位置是:网站首页>>Python>>Django

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')


0 +1