利用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对数据库库表的相关操作的主要内容,如果未能解决你的问题,请参考以下文章

Python Web开发:ORM 对关联表的操作

库表的增删改查

Django中利用type动态操作数据库表

MySQL用户库表的操作语法 关于用户的语法

ORM的相关操作

Mysql之库表记录相关操作4