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 ...
随机推荐
- hdu1710 Binary Tree Traversals
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1710 题意:给前序.中序求后序,多组 前序:根左右 中序:左右根 分析:因为前序(根左右)最先出现的总 ...
- Pyhton表白代码——浪漫圣诞节
圣诞节即将到了,所以这回通过turtle模块来编写一个表白的小程序 开发时间:2019-12-15 开发工具:Sublime 开发模块:turtle 这里用到了turtle库的相关知识,如果不熟悉可以 ...
- 为什么有ASP.NET
最近读了一些文章,总结一下: 在1999年,当时微软的windows系统运行的所有的应用程序都是有组件对象模型为根本基础开发的,用VB来处理数据访问和复杂的用户界面,缺点是不能使用函数指针,因为当时的 ...
- 基于Storm的WordCount
Storm WordCount 工作过程 Storm 版本: 1.Spout 从外部数据源中读取数据,随机发送一个元组对象出去: 2.SplitBolt 接收 Spout 中输出的元组对象,将元组中的 ...
- Linux vi与vim使用
vi与vimvi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对U ...
- 使用 Vue + axios 时,返回状态200,返回值被浏览器拦截
目录 一.前言 二.解决方案 1. 在全局定义 2. 单独定义 一.前言 在使用 Vue + TypeScript + axios 时,后端已经配置了Cors的前提下,但是在请求接口的时候,返回状态为 ...
- gitbook 入门教程之网站域名备案 icp 插件
欢迎访问 gitbook-plugin-icp 官网
- Java面向对象之初始化块
目录 Java面向对象之初始化块 普通初始化块 静态初始化块 初始化块与构造器 Java面向对象之初始化块 在程序设计中,让数据域正确地执行初始化一直是一个亘古不变的真理. 那么,有哪些手段可以初始化 ...
- SpringBoot初探JSP页面可能遇到的坑
第一个坑就是依赖没有配了 网上很多依赖的配置代码 在pom.xml文件的dependencies添加以下依赖 <!-- servlet依赖 --> <dependency> & ...
- Vue基础系列(五)——Vue中的指令(中)
写在前面的话: 文章是个人学习过程中的总结,为方便以后回头在学习. 文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. VUE基础系列目录 < ...