您的位置:首页 > 编程语言 > Go语言

django models单表查询

2019-06-11 20:40 1011 查看

显示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)
<TMovie: TMovie object (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'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: