Django中ORM对数据库的增删改查操作
2024-08-27 19:35:46
前言
什么是ORM? ORM(对象关系映射)指用面向对象的方法处理数据库中的创建表以及数据的增删改查等操作。
简而言之,就是将数据库的一张表当作一个类,数据库中的每一条记录当作一个对象。在Django中定义一个类,就是在数据库中创建一张表格。在Django中实例化一个类的对象,就是在数据库中增加了一条记录。在Django中删除一个对象,就是在数据库中删除了一条记录。在DJango中更改一个对象的属性,就是在数据库中修改一条记录的值。在django中遍历查询对象的属性值,就是在数据库中查询记录的值。
下面是几条django的views视图函数中的命令语句。
一,增(create,save)
from app01.models import * #create方式一: Author.objects.create(name='Alvin') #create方式二: Author.objects.create(**{"name":"alex"}) #save方式一: author=Author(name="alvin")
author.save() #save方式二: author=Author()
author.name="alvin"
author.save()
注意,增加时create+save两个组合,create是增的动作,save是加的动作,缺一个都不中。
二,删(delete)
>>> Book.objects.filter(id=1).delete()
(3, {'app01.Book_authors': 2, 'app01.Book': 1}) 如果是多对多的关系: remove()和clear()方法: #正向
book = models.Book.objects.filter(id=1) #删除第三张表中和女孩1关联的所有关联信息
book.author.clear() #清空与book中id=1 关联的所有数据
book.author.remove(2) #可以为id
book.author.remove(*[1,2,3,4]) #可以为列表,前面加* #反向
author = models.Author.objects.filter(id=1)
author.book_set.clear() #清空与boy中id=1 关联的所有数据
三,改(update和save)
#---------------- update方法直接设定对应属性----------------
models.Book.objects.filter(id=3).update(title="PHP")
##sql:
##UPDATE "app01_book" SET "title" = 'PHP' WHERE "app01_book"."id" = 3; args=('PHP', 3) #--------------- save方法会将所有属性重新设定一遍,效率低-----------
obj=models.Book.objects.filter(id=3)[0]
obj.title="Python"
obj.save()
# SELECT "app01_book"."id", "app01_book"."title", "app01_book"."price",
# "app01_book"."color", "app01_book"."page_num",
# "app01_book"."publisher_id" FROM "app01_book" WHERE "app01_book"."id" = 3 LIMIT 1;
#
# UPDATE "app01_book" SET "title" = 'Python', "price" = 3333, "color" = 'red', "page_num" = 556,
# "publisher_id" = 1 WHERE "app01_book"."id" = 3;
四,查(update和save)
# 查询相关API: # <1>filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 # <2>all(): 查询所有结果 # <3>get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。 #-----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()-------- # <4>values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列 # <5>exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 # <6>order_by(*field): 对查询结果排序 # <7>reverse(): 对查询结果反向排序 # <8>distinct(): 从返回结果中剔除重复纪录 # <9>values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 # <10>count(): 返回数据库中匹配查询(QuerySet)的对象数量。 # <11>first(): 返回第一条记录 # <12>last(): 返回最后一条记录 # <13>exists(): 如果QuerySet包含数据,就返回True,否则返回False。
最新文章
- [Modern OpenGL系列(四)]在OpenGL中使用Shader
- 【bzoj1688】[USACO2005 Open]Disease Manangement 疾病管理
- TAC Beta版本 冲冲冲!!!
- [小菜随笔]关于monkey报错日志分析
- OAF_开发系列26_实现OAF中Java类型并发程式开发oracle.apps.fnd.cp.request(案例)
- SAE上传文件到storage
- 超详细的Xcode代码格式化教程,可自定义样式。
- Python学习教程(learning Python)--2.3.3 Python函数型参详解
- Codeforces Round #237 (Div. 2) B. Marathon(卡long long)
- BIG5编码表
- HTML5实现IP Camera网页输出
- 针对ie9写特殊的样式
- URI和URL差别以及相对路径和绝对路径的差别
- 学习整理与细化(2)——HTML VS XHTML
- 如何在本地同时管理github仓库和codingnet仓库?
- Java学习笔记之——static关键字
- oracle数据库创建分区表
- 手动实现staticmethod和classmethod装饰器
- QTreeWidget的Item点击事件
- Maven提高篇系列之五——处理依赖冲突
热门文章
- CMMI模型
- [CSP-S模拟测试76]题解
- 20175120彭宇辰 《Java程序设计》第十一周学习总结
- php开发面试题---日常面试题1
- phpredis报错信息:protocol error, got &#39;o&#39; as reply type byte解决方案
- 转-调用HTMLTestRunner生成的报告中不能显示用例中print函数的输出
- Unity获取Android和iOS手机系统电量及网络状况
- 斯坦福【概率与统计】课程笔记(三):EDA | 直方图
- CF561做题
- npm安装报错:Error: EACCES: permission denied