django models单表查询

显示ORM底层生成SQL

from movie.models import * #导入
def sql():
    from django.db import connection
    print(connection.queries[-1]['sql'])
    

查询单个对象

所有的继承自models.Model的类 都会有一个叫objects(管理器)

*get()返回单个对象 返回多个会报错

	  Movie.objects.get(id=17)
      
      sql():SELECT `t_movie`.`id`, `t_movie`.`name`, `t_movie`.`account`, `t_movie`.`image`, `t_movie`.`download_url` FROM `t_movie` WHERE `t_movie`.`id` = 17


* 获得第一个

	    Movie.objects.first()
	    执行sql() 查看sql语法

* 获得最后一个

		Movie.objects.last()

	
* 获得记录的总数

		Movie.objects.count()

查询多个对象

* 获得所有的记录

	Movie.objects.all()
	# 懒加载 只有调用对象或遍历时才会执行sql语法
	
* 切片 (不支持负数索引)
	Movie.objects.all()[20:40]
	
	# 底层直接使用了limit字句,可以自动的分页
	
* 过滤 常用返回多个对象 没有也不报错
	#  结果集,查询集
	Movie.objects.filter(name='窒息')
	
* 模糊查询 
	* like
	* %(多个字符) _(一个字符)

* 查询爱情结尾的

	SELECT * from movie WHERE name LIKE '%爱情'

	Movie.objects.filter(name__endswith='爱情')

* 查询爱情开头的

	SELECT * from movie WHERE name LIKE '爱情%'
	
	Movie.objects.filter(name__startswith='爱情')
	

* 包含爱情的

	SELECT * from movie where name like '%爱情%'

	Movie.objects.filter(name__contains='爱情')


* 忽略大小写

	Movie.objects.filter(mname__istartswith='h')

* 查询某个字段是否为null

	Movie.objects.filter(mname__isnull=True)


* 多条件查询

		Movie.objects.filter(mname__contains='爱情',mid=147)
	

		Movie.objects.filter(mname__contains='爱情').filter(mid=147)

* 部分查询

		Movie.objects.values('mname','mid').filter(mname__contains='爱情')
		
* 排除一部分

	Movie.objects.filter(mname__contains='爱情').exclude(mname__startswith='爱情')

* 排序
		Movie.objects.order_by('id')
	
*降序
		Movie.objects.order_by('-id')


日期查询


 * 查询大于某个时间的记录

		Post.objects.filter(created__gt='2019-1-20')
 
 * 查询最近一个月的帖子(查询最近不活跃的用户)
 
		def get_recent_month_posts():
		    import datetime
		    current = datetime.date.today()-datetime.timedelta(days=30)
		    current = str(current)
		    return Post.objects.filter(created__gt=current)
		    
    Post.objects.filter(created__range=('2019-1-20','2019-3-20'))


你可能感兴趣的:(django models单表查询)