Django中Modual数据查询操作

https://blog.csdn.net/fm345689/article/details/80786284

本文以一个影视数据库为数据源

模型类:

作为演示sql,定义一个输出sql语句的方法

def showsql():
    from django.db import connection
    queries = connection.queries
    print(queries[-1]['sql'])
方法演示(第一条为django语句,第二条为对应sql语言):

Movie.objects.get(mid=150)    #查询一个,返回值:对象,查询不到出 .DoesNotExist 错。
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mid` = 150
Movie.objects.first()    #查询第一个,返回值:对象
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` ORDER BY `movie`.`mid` ASC LIMIT 1
Movie.objects.last()    #查询最后一个,返回值:对象
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` ORDER BY `movie`.`mid` DESC LIMIT 1
Movie.objects.count()    #查询总条数,返回值:int
 
SELECT COUNT(*) AS `__count` FROM `movie`
Movie.objects.all()    #查询所有,但默认只取前21条,返回值:QuerySet  ##懒加载
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` LIMIT 21
Movie.objects.all()[20:25]    #查询20到25条(切片)
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` LIMIT 5 OFFSET 20
Movie.objects.filter(mname='王牌保镖')    #条件查询,与get不同是的,它返回的是QuerySet集合,查找不到不报错
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mname` = '王牌保镖' LIMIT 21
模糊查询(%、_、like):

Movie.objects.filter(mname__endswith='保镖')    #以什么为结尾
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mname` LIKE BINARY '%保镖' LIMIT 21
 
Movie.objects.filter(mname__startswith='保镖')    #以什么开头
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mname` LIKE BINARY '保镖%' LIMIT 21
 
Movie.objects.filter(mname__contains='保镖')    #包含什么
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mname` LIKE BINARY '%保镖%' LIMIT 21
 
Movie.objects.filter(mname__exact='保镖')    #相等于什么
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mname` = '保镖' LIMIT 21
 
Movie.objects.filter(mname__istartswith='m')    #忽略大小写
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mname` LIKE 'm%' LIMIT 21
 
Movie.objects.filter(mname__isnull=True)    #判断该字段是否为空
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mname` IS NULL LIMIT 21
Movie.objects.filter(mname__contains='保镖',mid=161)    #多条件查询,后面逗号接语句
 
Movie.objects.filter(mname__contains='保镖').filter(mid=161)    #功能与上面相同
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE (`movie`.`mid` = 161 AND `movie`.`mname` LIKE BINARY '%保镖%') LIMIT 21
Movie.objects.values('mname','mid').filter(mname__contains='保镖')    #字段名部分显示
 
SELECT `movie`.`mname`, `movie`.`mid` FROM `movie` WHERE `movie`.`mname` LIKE BINARY '%保镖%' LIMIT 21
Movie.objects.filter(mname__contains='保镖').exclude(mname__startswith='爱情')    #不等于什么
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE (`movie`.`mname` LIKE BINARY '%保镖%' AND NOT (`movie`.`mname` LIKE BINARY '爱情%')) LIMIT 21
Movie.objects.filter(mname__contains='保镖').order_by('mid')    #排序,默认为升序, 在mid前加个"-"号则为降序,如:.order_by('-mid')
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mname` LIKE BINARY '%保镖%' ORDER BY `movie`.`mid` ASC LIMIT 21


注意:

mname__contains、mname__istartswith
都是字段名加双下划线来查询。同也可以运用其它的方式来查询如:gt、lt、et等等,如

Movie.objects.filter(mid__gt=500).order_by('-mid')    #查询mid大于等于500的数据
 
SELECT `movie`.`mid`, `movie`.`mname`, `movie`.`mdesc`, `movie`.`mimg`, `movie`.`mlink` FROM `movie` WHERE `movie`.`mid` > 500 ORDER BY `movie`.`mid` DESC LIMIT 21

猜你喜欢

转载自blog.csdn.net/hzp666/article/details/86704048