利用orm对数据库库表的相关操作
Posted roc-atlantis
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用orm对数据库库表的相关操作相关的知识,希望对你有一定的参考价值。
方式一:
# create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象
book_obj
=
Book.objects.create(title
=
"python葵花宝典"
,state
=
True
,price
=
100
,publish
=
"苹果出版社"
,pub_date
=
"2012-12-12"
)
方式二:
book_obj
=
Book(title
=
"python葵花宝典"
,state
=
True
,price
=
100
,publish
=
"苹果出版社"
,pub_date
=
"2012-12-12"
)
book_obj.save() # 对象.save()是必须有的
推荐用方式一
查询数据库常用的方法 ==》和查询请求体里面属性不同,注意区分, 查询请求体request.POST是一个queryset,这里用get方法查不到值默认返回None,而查询数据库get不到对象会直接报错。
book_obj
=
Book.objects.方法(参数视方法而定
)
1 <1> all(): 查询所有结果 2 3 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 4 5 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个, 6 如果符合筛选条件的对象超过一个或者没有都会抛出错误。 7 8 <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 9 10 <5> order_by(*field): 对查询结果排序 11 12 <6> reverse(): 对查询结果反向排序 13 14 <8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。 15 16 <9> first(): 返回第一条记录 17 18 <10> last(): 返回最后一条记录 19 20 <11> exists(): 如果QuerySet包含数据,就返回True,否则返回False 21 22 <12> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 23 model的实例化对象,而是一个可迭代的字典序列 24 <13> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 25 26 <14> distinct(): 从返回结果中剔除重复纪录
基于双下划线的模糊查询
1 Book.objects.filter(price__in=[100,200,300]) 2 Book.objects.filter(price__gt=100) 3 Book.objects.filter(price__lt=100) 4 Book.objects.filter(price__range=[100,200]) 5 Book.objects.filter(title__contains="python") 6 Book.objects.filter(title__icontains="python") 7 Book.objects.filter(title__startswith="py") 8 Book.objects.filter(pub_date__year=2012)
删除表记录
开始我们直接注释,然后makemigrations==》migrate直接刷入,下面直接调用封装的方法,更简便一点
注意一点:不能直接调用表名.objects进行删除!!!看下面
1 删除方法就是 delete()。它运行时立即删除对象而不返回任何值。例如: 2 3 4 model_obj.delete() 5 你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。 6 7 例如,下面的代码将删除 pub_date 是2005年的 Entry 对象: 8 9 Entry.objects.filter(pub_date__year=2005).delete() 10 在 Django 删除对象时,会模仿 SQL 约束 ON DELETE CASCADE 的行为,换句话说,删除一个对象时也会删除与它相关联的外键对象。例如: 11 12 13 b = Blog.objects.get(pk=1) 14 # This will delete the Blog and all of its Entry objects. 15 b.delete() 16 要注意的是: delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 本身。这是一种保护机制,是为了避免意外地调用 Entry.objects.delete() 方法导致 所有的 记录被误删除。如果你确认要删除所有的对象,那么你必须显式地调用: 17 18 19 Entry.objects.all().delete() 20 如果不想级联删除,可以设置为: 21 22 23 pubHouse = models.ForeignKey(to=‘Publisher‘, on_delete=models.SET_NULL, blank=True, null=True)
修改表记录
Book.objects.filter(title__startswith="py").update(price=120)
此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,表示受影响的记录条数。
以上是关于利用orm对数据库库表的相关操作的主要内容,如果未能解决你的问题,请参考以下文章