python#django数据库一对一/一对多/多对多

这篇具有很好参考价值的文章主要介绍了python#django数据库一对一/一对多/多对多。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一对一OneToOneField 用户和用户信息

搭建

# 一对一
class   TestUser(models.Model):
    username=models.CharField(max_length=32)
    password = models.CharField(max_length=32)

class TestInfo(models.Model):
    mick_name=models.CharField(max_length=32)
    user=models.OneToOneField(to=TestUser,on_delete=models.CASCADE()#on_delete 删除的模式 CASCADE 级联删除

让后执行数据库迁移命令

python#django数据库一对一/一对多/多对多,django,python,后端

 python#django数据库一对一/一对多/多对多,django,python,后端

 同步数据库

1再执行python manage.py makemigrations

2再执行python manage.py migrate

插入用户

python .\manage.py shell

from user.models import TestUser,TestInfo

u=TestUser()   

u.username="张三"   

u.password="123"

u.save()

查询数据库刷新稍等 数据库插入完成

python#django数据库一对一/一对多/多对多,django,python,后端

插入用户详情

ui.mick_name="阿三"
ui.user=u    
ui.save()

注意 数据库中有延迟 刷新数据库查看

python#django数据库一对一/一对多/多对多,django,python,后端

注意 :nick_name 这里笔者创建为了mick_name

查询用户的详情 查询详情的用户名

有一对一字段就用字段查询 没有字段使用表名查询

#通过用户查询用户信息

>>> u=TestUser.objects.get(id=1)
>>> u.username
'张三'
>>> u.testinfo           #注意这里要小写为数据库中 数据库表名
<TestInfo: TestInfo object (1)>

>>> u.testinfo.mick_name
'阿三'

#通过用户信息查询用户名称

>>> ui=TestInfo.objects.get(id=1)
>>> ui.user.username
'张三'

一对多ForeignKey 学生和教室

搭建

class ClassRoom(models.Model):
    r_number=models.CharField(max_length=32)#教室门牌号


# ForeignKey外键
class Student(models.Model):
    s_name=models.CharField(max_length=32)
    s_room=models.ForeignKey(to=ClassRoom,on_delete=models.CASCADE())#外键字段

 同步数据库

1再执行python manage.py makemigrations

2再执行python manage.py migrate

插入教室  插入学员

#进入命令行终端

python .\manage.py shell

>>> from user.models import Student,ClassRoom

#插入教室
>>> c=ClassRoom()
>>> c.r_number="1-2048"
>>> c.save()

#插入学员小明

>>> s=Student()
>>> s.s_name="小明"
>>> s.s_room=c
>>> s.save()

#插入学员小红

>>> s=Student()
>>> s.s_name="小红"
>>> s.s_room=c      
>>> c.save()        
>>> s.save()

#插入 二号教室 新增小花 将小花插入到二号教室

>>> c=ClassRoom()       
>>> c.r_number="1-2046"
>>> c.save

#查询到1号教室和2号教室

>>> c=ClassRoom.objects.get(id=1)  
>>> c1=ClassRoom.objects.get(id=2)
>>> s=Student()                    
>>> s.s_name="小花"                
>>> s.s_room=c1     
>>> s.save()

python#django数据库一对一/一对多/多对多,django,python,后端

python#django数据库一对一/一对多/多对多,django,python,后端

查询教室里所有的学员

有外键字段用外键字段 没有外键字段 表名小写_set

>>> c=ClassRoom()     

>>> c.student_set.all()
<QuerySet [<Student: Student object (1)>, <Student: Student object (2)>]>

#查询第一个用户 通过用户所在的教室查询用户所在教室编号

>>> s=Student.objects.get(id=1)
>>> s.s_room                    
<ClassRoom: ClassRoom object (1)>
>>> s.s_room.r_number
'1-2048'

student(学员表名小写)_set构成一表查询多表

查询学员对应的教室

多对多 ManyToManyField老师和教室 中间会有一个及链表

搭建

# 多对多

# 班级
class ClassLevel(models.Model):
    c_name=models.CharField(max_length=32)

# 老师
class Teacher(models.Model):
    t_name=models.CharField(max_length=32)
    t_class=models.ManyToManyField(to=ClassLevel)

 同步数据库

1再执行python manage.py makemigrations

2再执行python manage.py migrate

 

添加班级 添加老师

#添加班级

>>> from user.models import ClassLevel

>>> from user.models import Teacher

>>> c=ClassLevel()

>>> c.c_name="python_0831"

>>> c.save()

#添加老师老边

>>>t=Teacher()

>>>t.t_name="老边"

>>> t.save()

#将老师加入到班级python_0831
>>> t.t_class.add(c)
>>> t.save()

 

#添加老师龙文
>>> t=Teacher()
>>> t.t_name="龙文"
>>> t.save()

#将老师加入到班级python_0831
>>> t.t_class.add(c)
>>> t.save()

班级表

python#django数据库一对一/一对多/多对多,django,python,后端

教室表

python#django数据库一对一/一对多/多对多,django,python,后端 中间及链表python#django数据库一对一/一对多/多对多,django,python,后端

查询班级所有的认课老师

#查询第一个班级

>>> c=ClassLevel.objects.get(id=1)
>>> c
<ClassLevel: ClassLevel object (1)>

#获取班级人数
>>> c.teacher_set.all()
<QuerySet [<Teacher: Teacher object (1)>, <Teacher: Teacher object (2)>]>

#通过所有班级对象 循环遍历出老师姓名
>>> [t.t_name for t in c.teacher_set.all()]
['老边', '龙文']

查询老师带过的班级

>>> t=Teacher.objects.get(id=1)
>>> t.t_class.all()
<QuerySet [<ClassLevel: ClassLevel object (1)>]>
>>>文章来源地址https://www.toymoban.com/news/detail-627756.html

到了这里,关于python#django数据库一对一/一对多/多对多的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • [Mybatis的一对一和一对多]

    目录  🎂前言:  🎂一对一关联查询:  🎂一对多关联查询:  🎂 下面是上面代码中所涉及到的实体类结构设计:  🎂一对一关联查询:  🎂用户实体类(User):  🎂用户详情实体类(UserDetail):  🎂一对多关联查询:  🎂订单实体类(Order):  🎂订单详情实体类

    2024年02月12日
    浏览(11)
  • hibernate 一对一 一对多 多对多

    hibernate 一对一 一对多 多对多

    User 实体类 Address 实体类 测试 User实体类 Vlog实体类 测试 测试 mappedby : 属性指向实体关联表的拥有者,声明在被拥有者。 简单说就是另一边定义了关联规则,这边不用再定义一遍了,直接引用就行。 @JoinColumn : 外键列 在一对一中 @JoinColumn 声明在那个实体类中,生成数据库表

    2024年02月13日
    浏览(12)
  • queryWrapper处理一对一,一对多,多对多

    是的,定义一个 BankUser 对象时,通常需要在其内部定义一个 BankCard 字段来表示其与 bank_card 表的关联关系。 例如,在 BankUser 类中定义一个 BankCard 对象作为其属性:```java ``` 然后,在查询 BankUser 对象时,需要使用 LEFT JOIN 将 bank_user 和 bank_card 表进行关联,并使用 select 方法指

    2024年02月04日
    浏览(12)
  • [MySql]实现多表查询-一对一,一对多

    [MySql]实现多表查询-一对一,一对多

    目录 多表关联关系的分类 mybatis中的多表查询: 数据库准备  项目目录  一对一查询(多对一) 方式一:(xml文件映射) 查询结果:  方式二:(注解映射)  一对多查询(一对多) 方式一:(xml文件映射)  方式二:(注解映射) 既然数据库是存储项目中的数据的,项目中的

    2023年04月10日
    浏览(13)
  • TCP一对一聊天

    TCP一对一聊天

    客户端 服务端  结果展示  第二种 客户端 服务端 结果

    2024年02月04日
    浏览(11)
  • OVS Vxlan一对一模式VS一对多模式

    OVS Vxlan一对一模式VS一对多模式

    OVS Vxlan模式 OVS 支持 GRE、VXLAN、STT、Geneve和IPsec隧道协议,这些隧道协议就是overlay网络的基础协议,通过对物理网络做的一层封装和扩展,解决了二层网络数量不足的问题,最大限度的减少对底层物理网络拓扑的依赖性,同时也最大限度的增加了对网络的控制。针对VXLAN隧道创

    2024年02月03日
    浏览(23)
  • STM32 LWIP UDP 一对一 一对多发送

    STM32 LWIP UDP 一对一 一对多发送

    之前没有接触过网络的通信,工作需要 UDP 接收和发送通信,在网上没有找到一对一、一对多的相关例程;于是在技术总监对我的指导,用正点原子板子给的例程是从官方的程序修改的,实现了Lwip UDP通信一对一、一对多的发送程序,可以随便指定发送 ip地址 、发送 端口号

    2024年02月15日
    浏览(31)
  • MyBatis案例三:商品的类别(一对一,一对多查询)

    在数据库分别创建一个product、category表: 商品表(product) 商品编号(id) 商品名称(goodsname) 商品单价(price) 商品类别(typeid) 1 电视机 5000 1 2 冰箱 4000 2 3 空调 3000 2 4 洗衣机 2000 2 商品类别表(category) 商品类别编号(id) 商品类别名称(typename) 1 黑色家电 2 白色家电

    2023年04月08日
    浏览(17)
  • MyBatis关联查询实战:一对一与一对多详细解析

    MyBatis关联查询实战:一对一与一对多详细解析

    MyBatis是一款强大的持久层框架,提供了多种方式来处理关联查询,其中包括一对一和一对多的情况。在本文中,我们将深入探讨这两种关联查询的实现方式,并通过具体的示例代码进行详细解释。 实现一对一关联查询的方式有多种,其中包括嵌套查询(Nested Queries)和结果集

    2024年01月19日
    浏览(9)
  • TCP实现一对一聊天

    TCP实现一对一聊天

    一,创建类 二,类 1.ChatSocketServer类 2.ChatSocketClient类 三,结果(先服务  再客户)

    2024年02月03日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包