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映射(对象关系映射)的更多相关文章

  1. ORM即 对象-关系映射(转自:微冷的雨)

    ORM即 对象-关系映射: 将数据库中的数据关系表,映射为实体对象. 灵动思绪EF(Entity FrameWork) 作者: 微冷的雨  来源: 博客园  发布时间: 2013-01-22 16:2 ...

  2. Python学习---django之ORM语法[对象关系映射]180124

    ORM语法[对象关系映射] ORM: 用面向对象的方式去操作数据库的创建表以及增删改查等操作. 优点:1 ORM使得我们的通用数据库交互变得简单易行,而且完全不用考虑该死的SQL语句.快速开发. 2 ...

  3. Django——Django中的QuerySet API 与ORM(对象关系映射)

    首先名词解释. ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型 ...

  4. ORM框架(对象关系映射)

    Entity Framework 学习初级篇1--EF基本概况 http://www.cnblogs.com/xray2005/archive/2009/05/07/1452033.html ORM  ...

  5. 优酷项目之 ORM(数据库对象关系映射)代码重写

    前言: 我们在操作数据库时候一般都是通过sql代码来操作mysql数据库中相关数据,这就需要懂得sql语句,那么怎么样才能在不懂sql语句的情况下通过我们所学的python代码来实现对mysql数据库 ...

  6. ORM概述(对象关系映射)

    ORM概述: ORM(Object-Relational Mapping)表示对象关系映射.在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中.只要有一套程序能够做到加你对象与数据库 ...

  7. [Python之路] ORM(对象关系映射)

    一.概念 ORM是Python后端Web框架Django的核心思想,"Object Relational Mapping",即对象-关系映射,简称ORM. 一句话理解就是: 创建一 ...

  8. ORM:对象关系映射

    一.简单操作 定义:面向对象和关系型数据库的一种映射,通过操作对象的方式操作数据 对应关系: 类对应数据表 对象对应数据行(记录) 属性对应字段 导入:from app01 import models ...

  9. python之ORM(对象关系映射)

    实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要更改代码.orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句.所有使用Django开发的项目无需关心程序底层使用的 ...

  10. ORM对象关系映射

    ORM 总结: ORM:对象关系映射 作用: 1.将定义数据库模型类--> 数据库表 2.将定义数据库模型类中的属性--->数据库表字段 3.将模型对象的操作(add,delete,com ...

随机推荐

  1. [Python Modules] unittest.mock

    五夜光寒,照来积雪平于栈.西风何限,自起披衣看. 对此茫茫,不觉成长叹.何时旦,晓星欲散,飞起平沙雁. 在某个Python程序中看到这么一行 from unittest import mock 看起来 ...

  2. Local Model Poisoning Attacks to Byzantine-Robust Federated Learning

    In federated learning, multiple client devices jointly learn a machine learning model: each client d ...

  3. 十大C++实战项目,你会几个?【高薪必备】

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼   市面上有很多C++的实战项目,从简单到进阶,学习每个项目都 ...

  4. ARTS-S c语言统计程序运行时间

    #include <stdio.h> #include <sys/time.h> #include <unistd.h> int main() { struct t ...

  5. 大数据学习笔记——HDFS理论知识之编辑日志与镜像文件

    HDFS文件系统——编辑日志和镜像文件详细介绍 我们知道,启动Hadoop之后,在主节点下会产生Namenode,即名称节点进程,该节点的目录下会保存一份元数据,用来记录文件的索引,而在从节点上即Da ...

  6. NodeJS1-2 Node JS的优点

    NodeJS并不适合所有server端的场景,它的使用场景是及其有限的,web是nodeJS最适合的场景 前端偏爱node的原因其内核就是JavaScript 前端职责范围变大,统一开发体验 在处理了 ...

  7. javascript基础(001)-js加减乘除注意事项(含类型转换)

    一,加减乘除注意事项: 1.任意类型'+'字符串都被强转字符串 2.数字和布尔类型'+'undefined 结果为 NaN (Not a Number) 3.'-','*','/'操作会尝试把数据转为 ...

  8. vue bus.js 使用方法

    1 ,新建bus.js 内容如下 2,bus.$emit 绑定数据 bus.$emit('tags', this.tagsList); 第一个参数为定义的变量,第二个为集合数据 3, 监听数据 bus ...

  9. 曹工说Spring Boot源码(4)-- 我是怎么自定义ApplicationContext,从json文件读取bean definition的?

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码系列开讲了(1)-- Bean Definition到底是什么,附spring思维导图分享 工程代码地址 思维导图地址 工程结构图: 大 ...

  10. VNC连接CentOS7远程桌面

    1.在centos7安装图形化 先安装图形用户接口X Window System,再安装GNOME桌面. [root@centos7 ~]# yum groupinstall -y "X W ...