Django---orm多表操作

Django数据库连表查询(一对一、一对多、多对多) 1、一对一关系 比如某班级学生表和学生详细信息表 两张表结构如下 class Student(models.Model): stu_id = models.AutoField(primary_key=True) stu_name = models.CharField(max_length=32) class Stud... 阅读详情

0. 对于ForeignKey的使用

0.1 概念

有ForeignKey的表成为子表,对应没有ForeignKey的表称为主表

0.2 方法

  1. 直接使用values或values_list得到数据

filter和values以及values_list中字段的使用按照以下规则

主表中使用自己的字段直接使用,如果使用子表字段按照子表小写表名__字段名称

子表中使用自己的字段直接使用,如果使用主表字段按照外键名__主表字段名称的格式使用主表字段。

  1. 先获取对象再通过对象获取数据

filter中字段名的使用与上一条所述相同,区别在于使用first()或all()得到对象后通过对象得到数据的方法

主表对象查询子表

如果主表得到的对象为f,子表表名为Son,那么获取子表数据的方法有一下几种

  • f.son_set.all()
  • f.son_set.first()
  • f.son_set.values()
  • f.son_set.values_list()

子表对象查询主表

如果子表对象为s,子表中对应主表的外键为fk_father,那么可以使用s.fk_father得到主表对象,通过主表对象可以得到主表中的各个数据。

1. 一对一

一对一有两种实现方式分别是ForeignKey+unique=True以及OneToOneField

使用ForeignKey的方式与上述ForeignKey的使用方一样,使用OneToOneField有别于ForeignKey的地方在于,通过主表对象查询子表时不需要使用_set,可以直接使用子表名获取子表对象

举例说明w.blog_set.first().site和w.blog.site得到的结果是一样的,前者使用ForeignKey后者使用OneToOneField。

2. 一对多

通过外键建立一对多的关系

class UserGroup(models.Model):
    title = models.CharField(max_length=32)

class UserInfo(models.Model):
    user = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    age = models.IntegerField(default=0)

    fk_ug = models.ForeignKey('UserGroup', null=True)

得到的表如下所示:

# UserGroup
id|title
1 |r&d
2 |sales
3 |financial

# UserInfo
id|user|age|fk_ug_id|password|
1 |Jack|18 |1       |123
2 |Mike|28 |2       |123
3 |Dick|34 |3       |123
4 |Kate|23 |1       |123
5 |Zake|25 |1       |123

2.1 子表查询主表

  • 先获取子表对象再查询数据

filter中如果使用子表字段可以直接使用,如果使用主表字段获取子表对象,需要使用外键名__主表字段的格式来获取子表对象

查询子表数据通过子表对象调用子表中的外键然后查询主表数据,查询格式子表对象.外键字段名.主表字段名

v = models.UserInfo.objects.filter(id=1).first()
    print(v.user, v.password, v.age, v.fk_ug.title)
  • 直接使用values跨表查询数据

在values中直接使用外键名实现跨表查询数据,查询格式外键字段名__主表字段名

ret = models.UserInfo.objects.all().values('id', 'user', 'fk_ug__title')
    for item in ret:
        print(item['id'], item['user'], item['fk_ug__title'])
"""
1 Jack r&d
2 Mike sales
3 Dick financial
4 Kate r&d
5 Zake r&d

"""

上面两种方法都可以实现跨表查询,但是第一种每查询一次都要操作一次数据库,二第二种只操作一次数据库,拿到所有数据。

2.2 主表查询子表

  • 先获取主表对象再查询数据

filter中如果使用主表字段直接使用,如果使用子表字段获取主表对象需要使用子表表名__子表字段的格式

通过主表对象查询子表数据,由于主表中没有外键需要使用_set查询子表

obj = models.UserGroup.objects.filter(id=1).first()
    print(obj.userinfo_set) # singleTable.UserInfo.None
    print(obj.userinfo_set.all()) # <QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>

    for row in obj.userinfo_set.all():
        print(row.user, row.age)

    """
    Jack 18
    Kate 23
    Zake 25
    """
  • 直接使用values跨表查询数据,由于主表中没有外键,使用子表表名跨表查询,查询格式为子表表名__子表字段名

3. 多对多

3.1 基于关系表的多对多

两张表通过第三章关系表建立多对多的关系

class Boy(models.Model):
    name = models.CharField(max_length=32)

class Girl(models.Model):
    nick = models.CharField(max_length=32)

class Love(models.Model):
    b = models.ForeignKey('Boy')
    g = models.ForeignKey('Girl')

查询与name='Jack'的男生有关系的女生,Boy中没有外键,所以使用_set反向查找

obj = models.Boy.objects.filter(name='Jack').first()
love_girls = obj.love_set.all()
for row in love_girls:
    print(row.g.nick) # 打印女生的名字

还可以直接使用关系表查询,注意b__name这种通过外键加双下滑线的使用方法

love_grils = models.Love.objects.filter(b__name='Jack') # 得到Love对象,下面没循环一次跨表一次
for row in love_girls:
    print(row.g.nick)
love_grils = models.Love.objects.filter(b__name='Jack').values('g__nick') # 得到字典,一次查询得到所有数据
for item in love_girls:
    print(item['g__nick']) # 打印女生的名字
love_grils = models.Love.objects.filter(b__name='Jack').select_related('g') # 得到对象,一次查询得到所有数据
for obj in love_girls:
    print(obj.g.nick) # 打印女生的名字

3.1.1联合唯一索引

不能出现多条相同的数据,使用联合唯一索引。通过在Meta类中设置unique_together实现,实现方法如下所示。

class Boy(models.Model):
    name = models.CharField(max_length=32)

class Girl(models.Model):
    nick = models.CharField(max_length=32)

class Love(models.Model):
    b = models.ForeignKey('Boy')
    g = models.ForeignKey('Girl')

    class Meta:
        unique_together = [
            ('b','g'),
        ]

3.2 基于ManyToManyField的多对多

Django提供了一个叫做ManyToManyField的关键字,实现两张表之间的多对多的关联关系,而不用定义第三张关系表,Django会自动生成关系表。在任意一张表中设置这个关键字都可以,具体使用方法如下所示。

class Boy(models.Model):
    name = models.CharField(max_length=32)
    m = models.ManyToManyField('Girl')

class Girl(models.Model):
    nick = models.CharField(max_length=32)

由于models中并没有定义关系表,所以无法直接操作关系表添加数据,因而需要通过定义了ManyToManyField的类的对象操作关系表,操作方法如下所示 :

obj = models.Boy.objects.filter(name='Jack').first()
# 添加
obj.m.add(2)
obj.m.add(3, 4)
obj.m.add(*[1,5])
# 删除
obj.m.remove(2)
obj.m.remove(3, 4)
obj.m.remove(*[1,5])
# 重置
obj.m.set(*[1,]) # 只会剩下一条数据

该示例中使用了三种方法为关系表添加、删除、重置数据,表明添加数据可以接收三种参数。

3.2.1 数据查询

查询与有ManyToManyField的类的对象关联的数据成为正向查找, 反之成为反向查找

正向查找
obj = models.Boy.objects.filter(name='Jack').first()
girl_list = obj.m.all()

通过obj.m.clear()可以删除关系表中与name='Jack'相关的所有数据

反向查找

使用_set实现反向查找

obj = models.Boy.objects.filter(name='Alice').first()
boy_list = obj.boy_set.all()

使用ManyToManyField只能生成三列,两张表的id和自己的id

3.3 自定义关系表与ManyToManyField联合使用

class Boy(models.Model):
    name = models.CharField(max_length=32)
    m = models.ManyToManyField('Girl',through="Love",through_fields=('b','g',))

class Girl(models.Model):
    nick = models.CharField(max_length=32)

class Love(models.Model):
    b = models.ForeignKey('Boy')
    g = models.ForeignKey('Girl')

    class Meta:
        unique_together = [
            ('b','g'),
        ]

相比于单独使用自定义关系表,多了查询和清空数据的功能。

相比于单独使用ManyToManyField,增加了灵活性,可以在关系表中定义更多的字段。

3.4 自关联

4. orm其它操作

4.1 排序

order_by('-id', 'name')按照id排序,如果有相同的id则按照name排序,id前的符号表名逆序拍续集。

4.2分组

首先引入模块from django.db.models import Count, Sum, Max, Min

user_list = models.UserInfo.objects.values('fk_ug_id').annotate(cnt=Count('id'))
    print(user_list.query)
    # SELECT "singleTable_userinfo"."fk_ug_id",
    # COUNT("singleTable_userinfo"."id") AS "cnt"
    # FROM "singleTable_userinfo"
    # GROUP BY "singleTable_userinfo"."fk_ug_id"

    user_list = models.UserInfo.objects.values('fk_ug_id').annotate(cnt=Count('id')).filter(cnt__gt=2)
    print(user_list.query)
    # SELECT "singleTable_userinfo"."fk_ug_id", 
    # COUNT("singleTable_userinfo"."id") AS "cnt"
    # FROM "singleTable_userinfo"
    # GROUP BY "singleTable_userinfo"."fk_ug_id"
    # HAVING COUNT("singleTable_userinfo"."id") > 2

4.3 过滤

models.UserInfo.objects.filter(id__gt=1) # 大于
models.UserInfo.objects.filter(id__gte=1) # 大于等于
models.UserInfo.objects.filter(id__lt=1) # 小于
models.UserInfo.objects.filter(id__lte=1) # 小于等于

models.UserInfo.objects.filter(id__in=[1, 3, 4]) # 是列表中的某一个

models.UserInfo.objects.filter(id__range=[1, 3]) # 在一个范围内

models.UserInfo.objects.filter(name__startswith='xxx') # 区分大小写, 以‘xxx’开头
models.UserInfo.objects.filter(name__istartswith='xxx') # 不区分大小写, 以‘xxx’开头

models.UserInfo.objects.filter(name__endswith='xxx') # 区分大小写, 以‘xxx’结尾
models.UserInfo.objects.filter(name__iendswith='xxx') # 不区分大小写, 以‘xxx’结尾

models.UserInfo.objects.filter(name__contains='xxx') # 区分大小写, 包含‘xxx’
models.UserInfo.objects.filter(name__icontains='xxx') # 不区分大小写, 包含‘xxx’

models.UserInfo.objects.exclude(name__contains='xxx') # 不包含‘xxx’

4.4 F, Q, extra

4.4.1 F
from django.db.models import F

models.UserInfo.objects.all().update(age=F("age") + 1)

# 通过F取得F中参数在数据库中对应的字段所对应的值
4.4.2 Q

用于构造复杂的查询条件

from django.db.models import Q

models.UserInfo.objects.filter(Q(nid=8) | Q(nid__gt=10))

# 取 nid = 8 或者 大于等于10
q1 = Q()
q1.connector = 'OR'
q1.children.append('id', 1)
q1.children.append('id', 10)
q1.children.append('id', 9)

q2 = Q()
q2.connector = 'OR'
q2.children.append('c1', 1)
q2.children.append('c1', 10)
q2.children.append('c1', 9)

con = Q()
con.add(q1, 'AND')
con.add(q2, 'AND')


# 相当于 (id = 1 or id = 10 or id = 9)and (c1 = 1 or c2 = 10 or c3 = 9)

Q使用实例

from django.db.models import Q

condition_dict = {
    'k1':[1, 2, 3, 4],
    'k2':[1,],
}

con = Q()

for k, v in condition_dict.items():
    q = Q()
    q.connector = 'OR'
    for i in v:
        q.children.append('id', i)
    con.add(q, 'AND')

models.UserInfo.objects.filter(con)
4.4.3 extra

通过extra实现子查询
v = models.UserInfo.objects.all().extra(select={"n": "select count(1) from app01_usertype where id>%s"}, select_params=[1,])

通过select_params给%s传参数,如果有多个参数,在列表中依次添加,按顺序调用

models.UserInof.objects.extra(
    where=["id=1", "name=Jack"],
)
models.UserInfo.objects.extra(
                    select={'newid':'select count(1) from app01_usertype where id>%s'},
                    select_params=[1,],
                    where = ['age>%s'],
                    params=[18,],
                    order_by=['-age'],
                    tables=['app01_usertype']
                )
                """
                select 
                    app01_userinfo.id,
                    (select count(1) from app01_usertype where id>1) as newid
                from app01_userinfo,app01_usertype
                where 
                    app01_userinfo.age > 18
                order by 
                    app01_userinfo.age desc
                """
4.4.4 raw sql
from django.db import connection, connections

cursor = connection.cursor() # connection=default数据
cursor = connections['db2'].cursor()

cursor.execute("""SELECT * from auth_user where id = %s""", [1])

row = cursor.fetchone()
row = cursor.fetchall()

4.4.5 连表查询

使用select_related连表查询

q = models.UserInfo.objects.all().select_related('fk_ug')
    print(q.query)

    # SELECT "singleTable_userinfo"."id",
    # "singleTable_userinfo"."user",
    # "singleTable_userinfo"."password",
    # "singleTable_userinfo"."age",
    # "singleTable_userinfo"."fk_ug_id",
    # "singleTable_usergroup"."id", 
    # "singleTable_usergroup"."title"
    # FROM "singleTable_userinfo"
    # LEFT OUTER JOIN "singleTable_usergroup"
    # ON ("singleTable_userinfo"."fk_ug_id" = "singleTable_usergroup"."id")

4.4.6 多次查询

prefetch_related

q = models.UserInfo.objects.all().prefetch_related('fk_ug')
for row in q:
    print(row.id, row.fk_ug.title)

    # 1 r & d
    # 2 sales
    # 3 financial
    # 4 r & d
    # 5 r & d
    # 6 sales

可以看出上述语句实现了跨表,但并咩有连表查询,而是使用多次查询,

首先,select * from UserInfo并统计fk_ug的种类

然后通过select * from usertype where id in [2, 4]得到usertype,然后得到最终的数据。

具体实现更复杂,这里只是阐述基本的实现原理。

通过这种方式,在数据量比较大的情况下,相比于连表提高了查询效率。

使用Django ORM进行多表增删改查操作的Python实现 Django是一个流行的Python Web框架,它提供了强大的对象关系映射(Object-Relational Mapping,ORM)功能,使得在数据库中进行数据操作变得简单和高效。Author模型包含了name(姓名)和email(邮箱)两个字段,Book模型包含了title(标题)和author(作者)两个字段,并且使用了外键(ForeignKey)关联到Author模型。上述代码将标题为"Django for Beginners"的图书的标题更新为"Django for Experts"。 阅读详情

相关推荐

08--Django-ORM操作-正反向概念、多表操作

你只要掌握了正反向的概念以及双下划线,那么你就可以无限制的跨表了!2.反向查询按表名小写,表名小写或表名小写加_set.all()不要企图一次性将orm语句写完,如果比较复杂,就写一点看一点。各表数据提前预置,我们在test.py文件中练习。在书写orm语句的时候跟写sql语句一样的。eg:书 => 出版社 => 一对多。外键字段在书表中,书查出版社就是正向。外键字段如果不在手上,我查你就是反向。外键字段在我这里,我查你那就是正向。

摘 月 394

Django系列之orm查询

以下的这些查询,都是没有设置参数的前提下做的查询。

优快云1csdn1的博客 564

PIN限幅二极管在接收机中的应用

本文介绍了接收机保护限幅器的工作原理及应用,重点阐述了PIN二极管在雷达收发机中的关键作用。文章指出,限幅器能有效保护接收机灵敏元件免受大功率信号损害,主要通过反射而非耗散功率来实现保护功能。文章详细分析了PIN二极管的层结构特性及其阻抗变化机制,解释了多级限幅器的设计原理(包括清理级和粗限幅器的配合使用),并介绍了通过添加检波二极管降低阈值水平的方法。最后指出,实际应用中限幅器通常采用3级或更少的设计。

weixin_49761275的博客 2374

django外键以及主表和子表的相互查询

Django的外键使用 from django.db import models # Create your models here. class Category(models.Model): name = models.CharField(max_length=100) class Article(models.Model): titl...

weixin_30896763的博客 2681

DFT实战:如何用Synopsys工具搞定多时钟域Scan Chain设计(附避坑指南)

本文详细解析了使用Synopsys DFT Compiler工具链实现多时钟域Scan Chain设计的全流程,包括时钟混合策略、跨时钟域平衡技巧和实战脚本剖析。通过量产验证的工程实践方案,帮助DFT工程师有效解决复杂SoC设计中的Scan Chain挑战,提升测试效率和质量。

mm9012的博客 1033

安卓-折叠屏平行视界适配(多厂商兼容与优先级实战)

本文详细解析了安卓折叠屏平行视界适配的现状与挑战,重点探讨了多厂商兼容性策略和优先级冲突的实战解决方案。通过对比Google的Embedding方案和国内厂商的EasyGo标准,提供了检测设备支持方案、处理优先级冲突及双方案共存的最佳实践,帮助开发者高效完成折叠屏适配。

weixin_29190169的博客 163

Django模型层part two - 多表关系创建和多表操作

继续上面一篇文章的内容,本文介绍多表操作。使用django ORM可以创建多表关系,并且也支持多张表之间的操作,以创建表关系和查询两部分说明django ORM的多表操作。以作者、图书、出版社和作者信息几张表作为案例进行说明。

nhb687095的博客 947

还在手敲LaTeX公式?用Rime小狼毫打造你的专属数学输入法(附完整配置包)

本文介绍如何利用Rime小狼毫输入法引擎打造专属数学公式输入方案,显著提升LaTeX公式输入效率。通过详细配置教程和智能补全技巧,帮助科研人员和学生实现3-5倍的输入速度提升,特别适合学术写作和技术文档创作场景。

weixin_32520601的博客 282

django学习笔记4-多表查询

一,查询多表记录 两张表:index_vocation(主表)以name(外键)字段来关联index_personinfo(子表) index_vocation表 index_personinfo表 1,正向查询:通过主表查子表 任务:查找职业表id=2的记录的人员信息 练习:查找薪资大于等于10000及以上的人员信息 练习:查询姓名是王涛涛的职业信息 紧接上图: 说明:“王涛涛’并下在Vocation中,而在PersonInfo中 ,通过Vocation的外键name进行关联,在查询时确保

qq_52158420的博客 1194

禾赛XT16 vs XT32激光雷达实测对比:选16线还是32线?看完这篇不纠结

本文深度评测禾赛XT16与XT32激光雷达的性能差异与应用选择。通过实测数据对比,分析16线与32线激光雷达在点云密度、动态场景适应性及与IMU协同工作等方面的表现,帮助用户根据自动驾驶、机器人等不同应用场景做出最优选型决策。

table的专栏 945

全功能tgbot/Telegram机器人多功能有后台版源码

trx兑换 闪兑 关键字监控 群管 usdt监控 余额查询 推广分享 等几乎常见的tg机器人功能都有。全功能tgbot/telegram机器人多功能有后台版源码-打包好的可以直接上手。

百创科技 2702

django orm级联_Django框架之ORM多表关联操作

一、创建基表设置了abstract为True的模型类,称之为基表,这样的模型类是专门作为基类来提供公有属性的Model类的内部配置Meta类要设置abstract=True# Model类的内部配置Meta类要设置abstract=True,这样的Model类就是用来作为基表from django.db import modelsclass BaseModel(models.Model):is_d...

weixin_39542850的博客 704

嵌入式工程师成长之路(1)——元件基础(完整版)

为什么你的电路总是“玄学”故障?答案藏在这些元件里! 0欧电阻竟能引发信号反射?5V转3.3V电平匹配失败导致MCU烧毁?电容降压设计让电源“滋滋”响?——这些坑,本文全填平! 优快云硬件领域头部博主十年踩坑经验汇总,覆盖电阻、电容、电感核心难点+高频实战问题,让你从“调试地狱”直通“一次成功”!

云轩阁 2万+

Django中ORM系统多表数据操作

一,多表操作之增删改查 1.在seting.py文件中配置数据库连接信息 2.创建数据库关联关系models.py from django.db import models # Create your models here. class Book(models.Model): title = models.CharField( max_length=32) pu...

weixin_33834137的博客 203

JS逆向-B站评论数据w_rid参数和wts参数

本文是该专栏的第69篇,后面会持续分享python爬虫干货知识。本文以B站的评论数据为例,通过JS逆向获取其中的w_rid参数以及wts参数生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”来详细介绍。废话不多说,具体细节部分以及详细思路逻辑,笔者将在正文结合完整代码进行详细说明。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 2049

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Django-ORM多表操作(进阶)

Django-ORM多表操作(进阶) 一、创建模型   下面我们通过图书管理系统,来设计出每张表之间的对应关系。   通过上图关系,来定义一下我们的模型类。 from django.db import models class Book(models.Model): title = models.CharField(max_length=32) price ...

weixin_42127687的博客 635

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Django ORM多表操作

文章目录创建模型添加表记录**一对多**多对多多对多关系其它常用API基于对象的跨表查询一对多查询(Publish 与 Book)一对一查询(Author与AuthorDetail)多对多查询(Author与Book)基于双下划线的跨表查询一对多查询多对多查询一对一查询聚合查询和分组查询聚合分组查询练习F查询与Q查询F查询Q查询Python脚本中调用Django环境(django外部脚本使用models) 创建模型 表和表之间的关系 一对一、多对一、多对多 ,用book表和publish表自己来想想关系,

YxinMiracle's Studio. 551

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

06 Django-orm-多表操作

一 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄。 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email。 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one

lzplum619的博客 298

Django - ORM 数据库操作 - 多表操作

目录 一、建立多表关系结构 二、一对多 and 一对一 表关系的记录操作 1、 增(两种方式) 方式一、create方式创建,指定字段名传输数据 方式二、获取外键表对象id,给类定义的关系变量,赋值查询到的对象 2、改(两种方式) 方式一、获取对象,修改后save方法保存 方式二、update方法更新 三、多对多 表关系的记录操作 1、增 add() 2、删除 remove(...

LIN的博客 543

django orm关联查询_Django框架基于ORM实现外键关联操作 多表查询数据

我们知道在数据库中可以存在外键关联,那么在django中同样也可以实现。下面我们来创建一个类:from django.db import modelsclass UserGroup(models.Model):pid=models.AutoField(primary_key=True) #创建一个自增的id 主键 需要设置参数caption=models.CharField(max_length=...

weixin_39559523的博客 1889

04 Django-ORM多表操作(进阶)

一、创建模型   下面我们通过图书管理系统,来设计出每张表之间的对应关系。   通过上图关系,来定义一下我们的模型类。 from django.db import models class Book(models.Model): title = models.CharField(max_length=32) price = model...

weixin_30689307的博客 108

Django之模型---ORM 多表操作

多表操作 创建表模型 1 from django.db import models 2 3 # Create your models here. 4 5 6 clas...

dhydhy123456789的博客 128

Django框架(十三):Models之ORM对多表【多对多】的操作(增、删、改、查)

注意:表与表之间的外键关系的建立,分为不同的情况: 1.【一对多】关系,在子表(数据多的那一个表),创建外键: publish=models.ForeignKey("Publish",on_delete=models.CASCADE) 2.【多对多】关系,则需要一个中间表,创建方式:两种 第一种: authors=models.ManyToManyField("Author") ...

白骨梦儿 1702

Django--orm 多表外键字段的操作

orm 多表 记录与字段的 常用操作

weixin_43988680的博客 1824

Django框架(十二):Models之ORM对多表【一对多】的操作(增、删、改、查)

一、ORM多表操作之【一对多】增加记录(有道云笔记较详细) models中,创建三个表,说明一下:外键如何创建? #外键创建格式:外键名=models.ForeignKey("关联的表名"),默认关联表的主键,且这了的外键名并不是数据库中的外键名,数据库中记录的外键会根据这里的外键名加id:即:外键名_id #外键:一定是创建在数据表关系【一对多】中【多】的那个表中; from djan...

白骨梦儿 2177

Django 学习 之ORM多表操作

一.创建模型 1.模型关系整理 创建一对一的关系:OneToOne("要绑定关系的表名") 创建一对多的关系:ForeignKey("要绑定关系的表名") 创建多对多的关系:ManyToMany("要绑定关系的表名") 会自动创建第三张表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(m...

baijin20100228的博客 151
上一篇: 什么是web框架
下一篇: Django---orm单表操作
Techml
博客等级 码龄10年 16粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值