ORM多表增删改查
一 创建多表
在models.py里创建4张表:Author(作者)、AuthorDetail(作者详细信息)、Publish(出版社)、Book(书)
四张表关系为:

(1)首先创建一对一关系。OneToOneField()
创建Author表
class Author(models.Model): name=models.CharField( max_length=32)
age=models.IntegerField()
authorDetail=models.OneToOneField(to="AuthorDetail",to_field="id",on_delete=models.CASCADE)
models.OneToOneField是创建一对一关系的关键字,to="AuthorDetail"表示和AuthorDetail表创建一对一关系。to_field="id"表示关联字段,不写默认为Id(主键)。on_delete=models.CASCADE表示级联删除。(注:to后面的表名和字段都是字符串形式)。创建一对一关系,生成authorDetail,这个为关联属性。通过Author找AuthorDetail表中的内容就要通过这个关联属性。(生成一对一的表,会在关联的表生成字段:authorDetail_id)
(2)创建AuthorDetail表
class AuthorDetail(models.Model):
birthday=models.DateField(),
telephone=models.CharField(max_length=32) ,
addr=models.CharField( max_length=64)
(3)然后创建多对一关系。ForeignKey()
外键字段要加在多的一方,即Book表。

Book表和Publish通过ForeignKey连接起来,生成Publishs关联属性。
再建Publish表:

(4)建立多对多关系ManyToManyField
Book表和Author具有多对多关系。可以在任何一张表加。选择在Book表加:

(5)最后生成详细字段关系表

蓝色的只是类里面的关联属性,在表中没有这个字段,只有相应的id字段。
二 添加记录。
利用django的admin.py文件添加记录。
(1)首先在admin.py配置注册字段:

(2)在终端里输入:
Python manage.py createsuperuser创建超级用户
(3)在浏览器输入:http://127.0.0.1:8000/admin/登陆页面,和数据库同步,即可添加数据。

三 在视图函数中增删改查
1.增加
A.一对一
方式一:(常用) 通过id方式

先找到AuthorDetail中的那条记录,并生成obj对象。然后再创建Author记录时,让authorDetail_id=obj.id(Author表中有authorDetail_id字段的)
方式二:

首先创建好一个new_author_detail对象。然后创建Author记录时通过authorDetail等于该对象,就建立两者一对一关系。(不需要再查找一遍了)
B.一对多
方式一:(常用)(id连接)

同一对一增加一样。可以直接把Obj放在等式里。
方式二:(类属性连接)

C多对多
方式一(常用)
直接再Book表(关联表/有关联属性的)找到要添加的那条记录,然后调用Book的关联属性添加到指定的记录。

可以添加多个。方式为*[3,6]。里面的数字是id。
多对多(两张表的记录都已经存在,建立两者对应关系)
方式二:

先找到要添加的对象Book表的和Author表的。然后调用Book表的对象的author属性的add方法,添加Author表的对象。
2.删除
一对一和一对多的删除和单表删除是一样的。但要考虑级联删除。
级联删除原则:
我和你关联,你不能随便删-----------》你删我也删(级联)
我可以随便删,我删了对你没影响
(1)一对一

2是关联表中的内容,直接.deledte找到的记录,对被关联表没有影响。但1中删除了id为2 的记录,则在关联表中和id为2(即authorDetail_id=2)的记录也都删除了。(有关联id的那个值没了,这条id值对应的那条记录也没了)
(2)一对多

(3)多对多
多对多删除就是删除第三张表的两者对应关系

和add方法对应。通过类的关联属性增删。
set方法--------》先clear,再add

3.更新
(1)一对一
更新方法.update()前必须用filter()查找。不能用get().update()要用queryset对象。

(2)一对多

(3)多对多
Set方法
ORM多表增删改查的更多相关文章
- day 69 ORM 多表增删改查操作
http://www.cnblogs.com/liwenzhou/p/8660826.html 下面的代码是在 python console中配置的. 关闭pycharm会消失. from app01 ...
- Django项目的创建与介绍.应用的创建与介绍.启动项目.pycharm创建启动项目.生命周期.三件套.静态文件.请求及数据.配置Mysql完成数据迁移.单表ORM记录的增删改查
一.Django项目的创建与介绍 ''' 安装Django #在cmd中输入pip3 #出现这个错误Fatal error in launcher: Unable to create process ...
- ORM之单表增删改查
ORM之单表增删改查 在函数前,先导入要操作的数据库表模块,model from model所在的路径文件夹 import model 在views文件中,加的路径: #就一个app01功能的文件 ...
- GZFramwork数据库层《三》普通主从表增删改查
运行结果: 使用代码生成器(GZCodeGenerate)生成tb_Cusomer和tb_CusomerDetail的Model 生成器源代码下载地址: https://github.com/Gars ...
- GZFramwork数据库层《一》普通表增删改查
运行结果: 使用代码生成器(GZCodeGenerate)生成tb_MyUser的Model 生成器源代码下载地址: https://github.com/GarsonZhang/GZCode ...
- Django框架(八)--单表增删改查,在Python脚本中调用Django环境
一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...
- Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境
目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
- GZFramwork数据库层《四》单据主从表增删改查
同GZFramwork数据库层<三>普通主从表增删改查 不同之处在于:实例 修改为: 直接上效果: 本系列项目源码下载地址:https://github.com/GarsonZhang/G ...
随机推荐
- B/S和C/S架构的区别
一.B/S架构 什么是B/S模式 B/S模式,即浏览器/服务器模式,是一种从传统的二层CS模式发展起来的新的网络结构模式,其本质是三层结构C/S模式.B/S网络结构模式是基于Intranet的需求而出 ...
- 如何设计高并发web应用
所谓高并发,就是同一时间有很多流量(通常指用户)访问程序的接口.页面及其他资源,解决高并发就是当流量峰值到来时保证程序的稳定性. 我们一般用QPS(每秒查询数,又叫每秒请求数)来衡量程序的综合性能 ...
- 推荐3个Python初学者学习Python案例
回复资料,获取最新的Python的资料.想学习Python可以加微信回复报名. 希望今天的分享3个小案例,对你学习Python有帮助 Python 九九乘法表 以下实例演示了如何实现九九乘法表: 实例 ...
- 数学--数论-- HDU 2601 An easy problem(约束和)
Problem Description When Teddy was a child , he was always thinking about some simple math problems ...
- P3588 【[POI2015]PUS】(线段树优化建边)
P3588 [[POI2015]PUS] 终于有个能让我一遍过的题了,写篇题解纪念一下 给定长度为n的序列和其中部分已知的数,还有m个大小关系:区间\([l,r]\)中,有k个给定的数比剩下的\(r- ...
- Nginx模块开发(3)————使用upstream访问第三方服务
该模块可以完成如下的功能,当我们输入http://你的ip/lcwupstream时,会使用upstream方式访问淘宝搜索,打开淘宝搜索的主页面,代码如下: //start from the ver ...
- git新手使用教程包含各种系统
Git Tutorial 1.下载客户端 从Git官网下载客户端: https://git-scm.com/ Windows版下载地址: https://git-scm.com/downl ...
- 【Java基础总结】Java基础语法篇(上)
Java基础语法 思维导图 一.Java语言介绍 1.Java应用平台 JavaSE(Java Platform Standard Edition):开发普通桌面和商务应用程序,是另外两类的基础 Ja ...
- Openwrt:逆向永久修改Flash中的Mac地址
get mtd device cat /proc/mtd dev: size erasesize name mtd0: 00800000 00010000 "ALL" mtd1: ...
- java接口自动化(五) - 企业级代码管理工具Git的配置
1.简介 上一篇讲解完如何安装Git后,今天宏哥趁热打铁讲解一下Git的使用,要想使用Git,我们还需要做一些准备工作,首先你的拥有一个Git账号,所以如果你没有的话,就快速注册一个吧. 2.Git注 ...