orm单标操作
补充defer和only(数据库优化)
1 | # 我就想queryset中套author的对象,但是只有name |
1 | # defer:除了指定之外的 |
1.配置文件settings.py
mysql数据库
1 | DATABASES = { |
静态文件
1 | STATICFILES_DIRS= [ |
app配置mysql
1 | import pymysql |
2.数据库迁移
1 | -python3 manage.py makemigrations --->只是对变化做一个记录,记录文件在app的migrations |
3.在Python脚本中调用Django环境
在项目里面新建一个py文件
1 | import os |
4.orm操作
orm增加操作
方法一 create
1 | import os |
方法二 实例化生成一个对象
1 | # 方法二 先 models.Book实例化生成一个对象 在 内存里面 然后通过save()写入数据库里 |
时间格式
1 | 可以传字符串,可以传日期格式 |
orm删除操作
原理先查后删
1 | 先查询出装载QuerySet对象的列表 |
删除指定的全部数据(多条)
1 | ret = models.Book.objects.filter(name='西游记').delete() |
ret返回值
1 | 返回的是行数 |
删除指定的单条数据
1 | ret = models.Book.objects.filter(name='西游记').first() |
orm修改操作
修改指定的全部数据
1 | ret = models.Book.objects.filter(name= '西游记').update(price=20.9) |
修改指定的单条数据
1 | # 对象修改(没有update方法,但是可以用save来修改) |
orm查询操作 查询API(重点哦)
all() 查询所有结果
1 | print(models.Book.objects) # app01.Book.objects |
filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
相当于where
queryset对象打印sql
1 | ret=models.Book.objects.filter(name='西游记',price='73.8') |
和first()指定查询出第一个结果
1 | ret=models.Book.objects.filter(name='西游记').first() |
和last()指定查询出最后一个结果
1 | ret=models.Book.objects.filter(name='西游记').last() |
exists判断queryset对象是否存在
1 | ret = models.Book.objects.filter(name='西游记3355').exists() |
filter指定查询出全部结果
1 | ret=models.Book.objects.filter(name='西游记') |
get查询多个结果或者0个结果会报错
1 | # get 有且只有一个结果,才能用,如果有一个,返回的是对象,不是queryset对象,通常用在,用id查询的情况 |
exclude查询,筛选出不是该条件的数据
1 | ret = models.Book.objects.exclude(name='西游记') |
order_by(*args)查询 排序
正序
1 | ret=models.Book.objects.order_by('price') |
多个参数优先第一个order_by参数
1 | ret=models.Book.objects.filter(name='西游记3338').order_by('price','-id') |
倒叙reverse
order_by 负号能解决,但是提供了 reverse
1 | ret = models.Book.objects.filter(name='西游记3338').order_by('-id').reverse() |
count个数返回一个int类型
1 | ret = models.Book.objects.filter(name='西游记3338').count() |
values(*field)queryset对象里套字典
1 | # values(*field): queryset对象里套字典 |
value_listqueryset对象里套元组
1 | ret=models.Book.objects.all().values_list('name','price') |
distinct() 必须完全一样,才能去重只要带了id,去重就没有意义了
1 | ret=models.Book.objects.all().values('name').distinct() |
filter模糊查询
__lt 小于
1 | ret=models.Book.objects.filter(price__gt='89') |
__gt 大于
1 | ret=models.Book.objects.filter(price__gt='89') |
__lte小于等于
1 | ret = models.Book.objects.filter(price__lte='89') |
__gte大于等于
1 | ret = models.Book.objects.filter(price__gte='89') |
__in在什么容器里面
1 | ret=models.Book.objects.filter(price__in=['23.8','89','100']) |
__range在什么范围
1 | ret=models.Book.objects.filter(price__range=[50,100]) |
__contains 查询名字有’%红%’的书
1 | ret=models.Book.objects.filter(name__contains='红') |
__icontains 查询名字带p的书,忽略大小写
1 | ret=models.Book.objects.filter(name__icontains='P') |
__startswith以XX开头
1 | ret=models.Book.objects.filter(name__startswith='红') |
__endswith以XX开头
1 | ret=models.Book.objects.filter(name__endswith='梦') |
pub_date__year按年查询
1 | ret=models.Book.objects.filter(create_data__year='2017') |
pub_date__day按天查询
1 | ret = models.Book.objects.filter(create_data__day='25') |
作业
1 | 1 查询守约出版社出版过的价格大于200的书籍 |