第七章 Django框架——ORM介绍之单表操作
一、增加表记录
二、删除表记录
三、修改表记录
四、查询表记录
补充:
Django终端打印原生sql方法
# 在settings中进行如下配置 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
在Python脚本中调用Django环境
import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled15.settings") import django django.setup() from app01 import models books = models.Book.objects.all() print(books)
一、增加表记录
方式一:create()推荐这种
date类型注意:传字符串必须是:2014-5-12,也可以传datetime类型
# create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象 book_obj=Book.objects.create(title="python",state=True,price=100,publish="上海出版社",pub_date="2012-12-12")
方式二:save()
book_obj=Book(title="python",state=True,price=100,publish="上海出版社",pub_date="2012-12-12") book_obj.save()
二、删除表记录
delete()
(1)queryset对象可以调用
(2)obj对象也可以调用
1:总共影响的记录数量
{‘app01.Book’}:代表影响了哪个表的记录
1:影响这个表的记录数量
三、修改表记录
删除方法就是 update()
Book.objects.filter(title__startswith="py").update(price=120)
此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,表示受影响的记录条数。
对象不能调用
四、查询表记录
两种输出方式
基本查询API(以下13种查询方式作为基础必须学会)
(1) all()
查询结果:queryset对象
作用:查询所有结果
(2) filter(**kwargs)
查询结果:queryset对象
作用:它包含了与所给筛选条件相匹配的对象
sql语句对比:相当于sql的where,后面的条件都是and
(逗号代表and)
(3) get(**kwargs)
查询结果:返回的是具体对象
作用:返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
(4) exclude(**kwargs):
查询结果:queryset对象
作用:除。。。以外的
(5) order_by(*field):
查询结果:queryset对象
作用:对查询结果排序
用法:
order_by('price')升序
order_by('-price')降序
(6) reverse():
查询结果:
作用:对查询结果反向排序
用法:必须用在order_by以后
备注:
(7) count():
查询结果:数字对象
作用:返回数据库中匹配查询(QuerySet)的对象数量。
(8) first(): 返回第一条记录
查询结果:返回的是具体对象
作用:返回第一条记录
(9) last():
查询结果:返回的是具体对象
作用:返回最后一条记录
(10) exists():
查询结果:布尔值
作用:如果QuerySet包含数据,就返回True,否则返回False
(11) values(*field):
查询结果:queryset对象
作用:返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
sql语句对比:相当于sql中select * from book; 中的*的内容
(12) values_list(*field):
查询结果:queryset对象
作用:它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
对比value:
value里放字段
values_list里放元祖
(13) distinct():
查询结果:queryset对象
作用:从返回结果中剔除重复纪录
总结(链式调用):
1.返回Queryset对象的方法后面可以继续添加Queryset对象的方法,打印输出结果仍然是queryset对象
例如:
2.Queryset对象的方法后面一定可以点出返回具体对象的方法,打印输出结果是一条记录
例如:
返回QuerySet对象的方法有
all()
filter()
exclude()
order_by()
reverse()
distinct()
返回特殊的QuerySet
values() 返回一个可迭代的字典序列
values_list() 返回一个可迭代的元祖序列
返回具体对象的
get()
first()
last()
返回布尔值的方法有:
exists()
返回数字的方法有
count()
双下划线查询API
(1)__startswith
作用:以什么开头
(2)__endswith
作用:以什么结尾
(3)__contains
作用:包含...
(4)__icontains
作用:不区分大小写查询
(5)__gt
作用:大于
(6)__lt
作用:小于
(7)__gte
作用:大于等于
(8)__lte
作用:小于等于
(9)__range
作用:范围是多少到多少之间
与sql比较:
相当于sql的between
(10)__in
作用:获取指定属性为指定值的记录
(11)__year
作用:过滤某年1月1号到12月31号
总结:
双下划线属性可以连用