ORM映射(对象关系映射)
ORM映射(对象关系映射)
分创建表和操作表两个部分
创建单表
创建关联表(foreignKey)
一对一
一对多(重点)
多对多(重点)
创建表后加str方法把打印的地址转换成对应字符
表的操作(增删改查):
1.增(create,save)
from app01.modals import *
create方式一:Author.objects.create(name="eric")
create方式二:Author.objects.create(*{"name":"eric"})
save方式一:author = Author(name="eric")
author.save()
save方式二:author=Author()
author.name="eric"
author.save()
2.删(delete)
Book.object.filter(id=1).delete()
(3,{'app01.Book_authors':2,'app01.Book':1})
3.改(update,save)
update直接改:Publisher.objects.filter(id=2).update(name='eric')
save相当于重新赋值:author=Author.object.get(id=5)
author.name='eric'
author.save()
4.查(filte,value等)
查询API:54-02
filter:(**kwargs) :它包含了与所给筛选条件相匹配的对象
all():查询所有结果
get(**kwargs):返回与所给筛选条件匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会
抛出错误。
对查询结果进行处理:
values(**kwargs):返回一个ValueQuerySet 一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而
是一个可迭代的字典序列
exclude(**kwargs):它包含了与所给筛选条件不匹配的对象
order_by(*field):对查询结果排序
reverse():对查询结果反向排序
distinct():从返回结果中剔除重复记录
values_list(*field):它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
count():返回数据库中匹配查询(QuerySet)的对象数量。
fist():返回第一条记录
last():返回最后一条记录
exists():如果QuerySet包含数据就返回True,否则就返回False
惰性机制:
1.可迭代
2.可切片
5.重点:如何创建存在一对多或多对多关系一本书的信息呢?(如何处理外键关系的字段如一对多的publisher和
多对多的authors)
一对一(OneToOne):
一对多(foreignKey):
插入(1)models.Book.object.create(title="Python",publish_id=2)
(2)推荐使用:
models.Book.object.create(title="Python",publish=obj)
由于绑定一对多的字段,比如publlish_id
多对多(通过外键和方法自动创建第三张表):model.manytomanyfield()
自动创建第三张表:
add()绑定关系
remove()解除关系
----正向查询(例子是从2开始建立的正向查询)
book=models.Book.objects.filter(id=2)[0] #获取id=2时的参数值
authors=models.Author.objects.filter(id__gt=2) #大于2
book.author.add(*authors)
book.author.remove(*authors) #移除关系
----反向查询 (例子是从3开始到2建立的反向查询)
author=models.Author.objects.filter(id=3)[0]
books=models.Book.objects.filter(id__gt=2)
author.book_set.add(*books)
author.book_set.remove(*books) #移除关系
非自动创建第三张表(手动):
手动建表可以直接插入数据
联合唯一:unique_together=['字段','字段']
控制台执行数据库操作:
python manage.py makemigrations
python manage.py migrate
注:第三张表的删除会出现级联删除情况,update()方法要用集合对象才能调用
manytomany():通过两个foreignKey
缓存时用iterator()方法把对象封装成可迭代对象
ORM映射(对象关系映射)的更多相关文章
- ORM即 对象-关系映射(转自:微冷的雨)
ORM即 对象-关系映射: 将数据库中的数据关系表,映射为实体对象. 灵动思绪EF(Entity FrameWork) 作者: 微冷的雨 来源: 博客园 发布时间: 2013-01-22 16:2 ...
- Python学习---django之ORM语法[对象关系映射]180124
ORM语法[对象关系映射] ORM: 用面向对象的方式去操作数据库的创建表以及增删改查等操作. 优点:1 ORM使得我们的通用数据库交互变得简单易行,而且完全不用考虑该死的SQL语句.快速开发. 2 ...
- Django——Django中的QuerySet API 与ORM(对象关系映射)
首先名词解释. ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型 ...
- ORM框架(对象关系映射)
Entity Framework 学习初级篇1--EF基本概况 http://www.cnblogs.com/xray2005/archive/2009/05/07/1452033.html ORM ...
- 优酷项目之 ORM(数据库对象关系映射)代码重写
前言: 我们在操作数据库时候一般都是通过sql代码来操作mysql数据库中相关数据,这就需要懂得sql语句,那么怎么样才能在不懂sql语句的情况下通过我们所学的python代码来实现对mysql数据库 ...
- ORM概述(对象关系映射)
ORM概述: ORM(Object-Relational Mapping)表示对象关系映射.在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中.只要有一套程序能够做到加你对象与数据库 ...
- [Python之路] ORM(对象关系映射)
一.概念 ORM是Python后端Web框架Django的核心思想,"Object Relational Mapping",即对象-关系映射,简称ORM. 一句话理解就是: 创建一 ...
- ORM:对象关系映射
一.简单操作 定义:面向对象和关系型数据库的一种映射,通过操作对象的方式操作数据 对应关系: 类对应数据表 对象对应数据行(记录) 属性对应字段 导入:from app01 import models ...
- python之ORM(对象关系映射)
实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要更改代码.orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句.所有使用Django开发的项目无需关心程序底层使用的 ...
- ORM对象关系映射
ORM 总结: ORM:对象关系映射 作用: 1.将定义数据库模型类--> 数据库表 2.将定义数据库模型类中的属性--->数据库表字段 3.将模型对象的操作(add,delete,com ...
随机推荐
- 2017 CCPC秦皇岛 L题 One Dimensions Dave
BaoBao is trapped in a one-dimensional maze consisting of grids arranged in a row! The grids are nu ...
- HDU4109-instruction agreement(差分约束-最长路+建立源点,汇点)
Ali has taken the Computer Organization and Architecture course this term. He learned that there may ...
- python中bitmap的参数
Tkinter Bitmaps: 你会使用这个属性显示一个位图.有以下类型的可用位图. 你会使用这个属性显示一个位图.有以下类型的可用位图.: "error" "gray ...
- 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor
[Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...
- 一篇文章让你明白CPU缓存一致性协议MESI
CPU高速缓存(Cache Memory) CPU为何要有高速缓存 CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展速度远远不及CPU.这就造成了高性能能的内存和硬盘价格及 ...
- 每天用Mybatis,但是Mybatis的工作原理你真的知道吗?
近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了. 核心部件: SqlSession Executor Sta ...
- apache与tomcat的区别
1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是A ...
- 分享一个mysql服务启动与关闭的bat文件
有时候打开数据库可视化工具(sqlyog.navicat)连接数据库时,会出现以下报错信息. 大家都知道是数据库的服务没有启动. 所以我想给大家分享一个bat文件可供快速启动mysql的数据库的服务, ...
- 《Java练习题》Java编程题合集(全)
前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题. 初学者: <Java练习题>习题集一 https://www.cnblogs.com/jssj/ ...
- 深度剖析YOLO系列的原理
深度剖析YOLO系列的原理 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/12072225.html 目录 1. ...