基于表关系的增删改查

创建四表,author,book,publish,author-detail  存在多对多,一对一,多对一的关系

在models里创建

class Pulish(models.Model):

id=models.AutoField(primary_key=True)

name=models.CharField(max_length=32)

address=models.CharField(max_length=32)

class Book(models.Model):

id=models.AutoField(primary_key=True)

 name=models.CharField(max_length=32) price=models.DecimalField(max_digits=5,decimal_places=2) publish_date=models.DateField()

pulish=models.Foreignkey(to=Pulish,to_field=id)

author=models.ManyToManyField(to=Author,to_field=id)

class Author(models.Model):    id = models.AutoField(primary_key=True)    name = models.CharField(max_length=32)    author_detail = models.OneToOneField(to=‘AuthorDetail‘, to_field=‘id‘)

class AuthorDetail(models.Model):    id = models.AutoField(primary_key=True)    age = models.IntegerField()    telephone = models.BigIntegerField()    info = models.TextField()

在test测试
import osimport djangoos.environ.setdefault("DJANGO_SETTINGS_MODULE", "dj01.settings")django.setup()

单对单的增删改查增加detail=Author_detail.objects.create()
Author.objects.create(author_detail=detail)或者(author_detail_id=detail_id)

删除
删除被依附表字段,依附表会删除
 Author.objects.last().delete()# Author.objects.filter()[2].delete()

一对一不考虑更新

查询
# 连表查询规则# 1. 正向逆向概念:从存放外键的表到关系表称之为正向跨表查询,反之称之为逆向查询# 2. 正向查询通过外键属性名进行跨表查询# 3. 逆向查询通过关联表对应类名小写进行跨表查询

# 在连表查询规则规则之上,逆向查询遇到多条结果,在类名后再添加_set
# author=Author.objects.first()# print(author.author_detail.age)## print(AuthorDetail.objects.first().author.name)

多对一
# publish=Publish.objects.create(name=‘oldboy‘,address=‘上海‘)# publish=Publish.objects.create(name=‘商务出版社‘,address=‘北京‘)# book=Book.objects.create(name=‘老人与海‘,price=666.66,publish_date=‘2018-8-8‘,publish_id=1)# book=Book.objects.create(name=‘谁的青春不迷茫‘,price=66.66,publish_date=‘2016-6-6‘,publish_id=3)# book=Book.objects.create(name=‘洛丽塔‘,price=166.66,publish_date=‘2006-3-3‘,publish_id=3)

# Book.objects.filter(id=1).delete()# Publish.objects.filter(id=2).delete()# 删除被依附表字段,依附表会删除

# book=Book.objects.filter(id=2)[0]# book.publish_id=2# book.save()

查询
# print(Book.objects.first().publish.address)

# print(Publish.objects.first().book_set.first().price)     里面列表不能用索引

多对多
# book=Book.objects.filter()[0]# b2=Book.objects.filter()[2]# a1=Author.objects.filter()[0]# a2=Author.objects.last()# book.author.add(a1)# book.author.add(a2.id)# b2.author.add(3,10)# 清空# book.author.clear()

# 通过id或对象清除author属性某个# book.author.remove(a2)

# 清除该本书的之前所有关系记录,添加新的关系# book.author.clear()# book.author.add(a2.id)

# 去除列表中不存在的值,添加新值# book.author.set([a1,a2])

查询
# 多对多# print(Book.objects.last().author.first().name)# print(Author.objects.last().book_set.last().name)

查询
 __可以将关联的表关联表的属性全部调出来
查询出版社在上海的出版过的所有书的 作者姓名、作者电话、具体出版社名 的相关信息
print(Publish.objects.filter(address__5exact=‘上海‘).values(‘book__author__name‘,‘book__author__author_detail__telephone‘,‘name‘))
 


原文地址:https://www.cnblogs.com/wrqysrt/p/10485223.html

时间: 2024-10-07 13:31:56

基于表关系的增删改查的相关文章

基于maven+ssm的增删改查之批量删除

首先将之前的删除单个的eq(1)改为eq(2),因为我们新增了一个多选项. 然后是在delete.js中加入: //点击全部删除,就批量删除 $("#emp_delete_all_btn").click(function(){ var empNames = ""; var del_idstr = ""; //遍历选中的,获取其姓名和id $.each($(".check_item:checked"),function(){ /

hibernate多对多关系配置--增删改查

hibernate多对多关联配置--并实现增删改查 hibernate就不多介绍了,这里就直接上我项目中使用的例子做说明. 数据模型 这是项目中用户和用户组的数据模型er图草稿,具体的model对象字段就以项目中的为主了. model类以及pojo接口,这里pojo接口用不上,大家测试的时候也可以去掉 package com.supre.model; import java.io.Serializable; import java.util.Set; public class User { pr

Django 多对多关系的增删改查

目录 Django多对多数据增删改查 1.表结构及基本方法 2.查 3.增 4.改 Django多对多数据增删改查 1.表结构及基本方法 1.表结构 # models.py class Book(models.Model): author = models.ManyToMany(to='author', relate_name='author') """ ...字段 """ class author(models.Model): "&q

Python 集合的各种操作 数学运算 关系操作 增删改查 生成式

# 集合是无序的 是可变的 不能重复 允许数学运算 分散存储 # 创建# collegel = {'哲学','经济学','法学','教育学'}## # {'教育学', '经济学', '法学', '哲学'}# print(collegel)## # set# collegel2 = set(['金融学','哲学','经济学','法学','教育学'])# print(collegel2)## # 使用set创建字符串集合# collegel3 = set('中华人民共和国')# # {'共', '华

数据库初识 用户创建授权 库与表内容的增删改查

初识数据库 为什要用数据库 第一,将文件和程序存在一台机器上是很不合理的. 第二,操作文件是一件很麻烦的事 数据库的优势 1.程序稳定性 :这样任意一台服务所在的机器崩溃了都不会影响数据和另外的服务. 2.数据一致性 :所有的数据都存储在一起,所有的程序操作的数据都是统一的,就不会出现数据不一致的现象 解决了多个服务同时使用数据的一致性间题 3.并发 :数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作,不需要我们自己写socket 解决了并发问题 4.效

基于springmvc的简单增删改查实现---中间使用到了bean validation

1 package com.kite.controller; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import javax.validation.Valid; 7 8 import org.springframework.stereotype.Controller; 9 import org.springframework.ui.Model; 10 import org.springframework.validat

单表内容的增删改查

操作表内容*** 注册一个表 create table d1(id int ,name varchar(12)); insert into d1(id,name) values (1,'小珊珊'), (2,'小白白'), (3,'小嘿嘿'); 增删改 增加 普通版 insert into 表名 values (内容1,内容2),(内容1,内容2); 实列 insert into user values(2,'wusir'),(3,'太亮'); 推荐版 insert into 表名 (字段1,字段

多表内容的增删改查

笛卡尔积 将两表所有的数据一一对应,生成一张大表 不建议 select * from dep,emp; #两个表拼一起 select * from dep,emp where dep.id = emp.dep_id; #找到两表之间对应的关系记录 select * from dep,emp where dep.id = emp.dep_id and dep.name='技术'; #筛选部门名称为技术的大表中的记录 select emp.name from dep,emp where dep.id

Django学习【第6篇】:Django之ORM单表操作(增删改查)

django之数据库表的单表查询 一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",course="python",birth="2000-9-9",fenshu=80) Frank_obj.save() # 方式二: models.Student.objects.create(name ="海燕",co