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 ...
随机推荐
- centos7安装及部署zabbix监控
一:实验环境 server.zabbix.com-------------------- 192.168.200.11 agent.zabbix.com------------------------ ...
- vue2.x学习笔记(二十六)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12682137.html. 单文件组件 介绍 在很多的vue项目中,我们都是使用[Vue.component]来定义 ...
- Linux hostname主机名查看和设置
查询主机名: uname -n hostname [root@oldboy ~]# uname -n oldboy [root@oldboy ~]# hostname oldboy Linux操作系统 ...
- HTML中使用CSS样式(下)
上节内容回顾加补充: 补充:默认img标签,有一个1px的边框 如果点击图片跳转到连接,a标签下套img标签,在IE有的版本中,会有蓝色边框. <a href="http://blog ...
- nodejs实现定时爬取微博热搜
The summer is coming " 我知道,那些夏天,就像青春一样回不来. - 宋冬野 青春是回不来了,倒是要准备渡过在西安的第三个夏天了. 废话 我发现,自己对 coding 这 ...
- html入门详细笔记
Web的基本概念 什么是Web? 中文翻译"网页",它是一些列技术的总称,(包括网站的前台布局.后台程序.美工.数据库开发等),我们称它为网页. Web标准 结构标准(HTML) ...
- POJ2421 Constructing Roads 最小生成树
修路 时限: 2000MS 内存限制: 65536K 提交总数: 31810 接受: 14215 描述 有N个村庄,编号从1到N,您应该修建一些道路,使每两个村庄可以相互连接.我们说两个村庄A ...
- B. Phoenix and Beauty(贪心构造)
\(给定序列长n的数组和k.完美数组的定义是数组中每一个连续k项的子段和为定值\) \(现在要求插入一些数使得数组满足条件,输出你构造的新数列.\) \(\color{Red}{----------- ...
- Re模块练习题
import re s = "1 -2*(60+(-40.35/5)-(-4*3))" # 获取所有数字 ret = re.findall(r"\d+", s) ...
- React Native超简单完整示例-tabs、页面导航、热更新、用户行为分析
初学React Native,如果没有人指引,会发现好多东西无从下手,但当有人指引后,会发现其实很简单.这也是本人写这篇博客的主要原因,希望能帮到初学者. 本文不会介绍如何搭建开发环境,如果你还没有搭 ...