Django ORM单表操作之增删改查

单表新增

新增方法2个,一个是book.save(),另一个是book.object.create()
这个2个方法都有返回值,返回的是你添加的内容,可以调用里面你添加的属性

from my_app.models import Book  # 先导包 导入book类
def orm_add(request):
    #对book表添加方式1  pub_date这个是日期格式必须是 年-月-日  
    new_obj = Book(title="go书",price=100,pub_date="2021-1-3",publish="人民出版社")
    print(new_obj)
    print(new_obj.title)
    new_obj.save() # save会对数据库表进行对记录的增加操作
    #对book表添加方式2  create()方法 直接调用save保存,create是有返回值的
    new_obj = Book.objects.create(title="java", price=300, pub_date="2021-4-3", publish="南京出版社")
    #object.create()会返回一个对象,这个对象就是插入数据的数据,里面有插入时候的title price pubdate publish的属性
    print(new_obj)
    print(new_obj.title)
    return HttpResponse("实例已添加")

单表查询

查询中要注意返回的是一个queryset的对象类型很多查询方法都要看得出的结果类型是否是个queryset. queryset 是个序列对象,允许像列表一样操作遍历
返回结果默认是 Book object (1) 为了看得清楚,可以在book类下面设置__str__,让对象返回的时候默认打印对象的title属性
返回值就改为了 <QuerySet [<Book: python书>, <Book: php>, <Book: java>]>

常用方法

方法 用处 调用对象 返回对象 例子1 例子2 例子3 例子4 例子5 例子6
all() 查询所有结果 <QuerySet [<Book: Book object (1)>, <Book: Book object (2)>]> QuerySet Book.object.all() - - -
filter(**kwargs) 筛选 Queryset Queryset Book.object.all().filter(price=100) 1 1 1
get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,大于1个或者0个就报错 Queryset Module Book.object.get() 1 1 1
exclude(**kwargs) 它包含了与所给筛选条件不匹配的对象 QuerySet QuerySet Book.objects.exclude() 1 1 1
order_by(*field) 对查询结果排序 QuerySet QuerySet Book.objects.order_by("-id") id前加-代表降序, 不加符号代表升序 Book.objects.order_by("id","price") 也可以对多个表头进行排序
count() 返回数据库中匹配查询(QuerySet)的对象数量 QuerySet INT 1 1 1 1
first() 返回第一条记录 QuerySet module对象 Book.objects.all().first() 1 1 1
last() 返回最后一条记录 QuerySet module对象 Book.objects.all().last() 1 1 1
exists() 如果QuerySet包含数据,就返回True,否则返回False QuerySet Bool 因为他只取表中的一条数据,所以操作速度很快 1 1 1
values(*field) 返回一个ValueQuerySet——一个特殊的QuerySet QuerySet QuerySet Book.objects.all().values("price") 1 1 1
values_list(*field) 与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 QuerySet QuerySet Book.objects.all().values_list("price") 1 1 1
distinct() 去重 QuerySet QuerySet对象 Book.objects.all().values("price").distinct() 1 1 1
reverse() 待补 QuerySet QuerySet对象 Book.objects.all().reverse() 1 1 1

values和values_list返回值的区别

单表模糊查询

查询的数据库资料

filter()方法 __gt=100 和__lt=100 分别是大于100 小于100 ,__startwith="py" 和 __endtwith="py" 分别搜索以py开头和结尾的字符串
title__contains="p" 和 title__icontains="p" 分别搜索包含p字符的数据,后者不区分大小写
price__in=[100,200,300],匹配价格分别为100,200,300的数据
pub_date__month=3,pub_date__year=2021,这个查询年月日的只对date数据类型有效
例如obj = Book.objects.filter(price__gt=100)
obj = Book.objects.filter(pub_date__month=3,pub_date__year=2021)

单表删除

删除方法就是 delete()。它运行时立即删除对象而不返回任何值。例如 model_obj.delete()
你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。
delete方法也会有个返回值 (2, {'my_app.Book': 2}) 代表删除个数,以及哪张表成功删除的个数,一般没什么用.
obj = Book.objects.filter(title="go").delete()
该方法可以被model对象调用,也可以被queryset对象调用

单表改

改的方法是update()
该方法可以被model对象调用,只能被queryset对象调用,所以如果查询记录的queryset不只一条记录,那么会对所有的记录都进行更改
obj = Book.objects.filter(price=100).update(title="书名全改100")

原文地址:https://www.cnblogs.com/Young-shi/p/15096689.html