【django】关联模型类中数据的增删改查操作总结

news2025/1/11 8:41:03

在这里插入图片描述


文章目录

  • 一、多对一
    • 正向操作
    • 1、改
      • 方法一
      • 方法二
    • 2、删
    • 3、查
    • 反向操作
      • 案例1:查询百度渠道下的所有学生信息
      • 案例2:新增一个百度渠道下的学生
    • 1、增
      • 直接创建Student对象
    • 2、改
      • 方法一:add()
        • 案例1:将s1,s2,s3添加到百度渠道中
      • 方法二:替换对象集
        • 案例2:将channel1模型对象下设置为学生s1和s2,之前不管channel1下面有多少学生都置为None
    • 3、删
      • a、从相关对象中清空指定的模型对象
        • 案例1:清除某个渠道中的某些学生
      • b、从相关对象中清空所有的模型对象
        • 案例2:清除某个渠道中的所有的学生
    • 4、查
      • a、查所有
      • b、查询来自抖音渠道的学生名叫kobe的学生
        • 方法一
        • 方法二
      • c、自定义关联关系字段
  • 二、多对多
    • 1、增
      • 案例1:通过学生创建课程
      • 案例2:通过课程创建学生
      • 案例3:有学生s1,s2,s3,课程c1,c2,c3,学生s1报名了c1,c2
      • 案例4:学生s2,s3报名了c2
    • 2、删
      • 案例5:学生s1,去掉课程c1的报名
      • 案例6:课程c2,去掉学生s2的报名
      • 案例7:清空clear
    • 3、改
      • 案例8:修改学生s1的报名为c1和c2,如果学生s2还有其他的报名,会被删掉
      • 案例9:修改课程c1的报名为s1和s2,如果还有其他的学生报名, 也会被删掉
    • 4、查
      • 案例10:查报名了某个课程的学生
      • 案例11:查某个学生报名的课程
    • 可定义的反向字段名
  • 三、一对一
    • 1、增
      • 案例1:给某个学生添加学生详情
    • 2、删
      • 案例2:删除某个学生的学生详情
    • 3、改
      • 案例3:修改某个学生的学生详情
      • 案例4:修改某个学生详情对应学生的信息
    • 4、查
  • 四、跨表查询
    • 案例1:例如查询年龄大于18岁的学生都报名了那些课程?
    • 案例2:查询报名了python课程的学生?
    • 案例3:查询百度渠道的学生,报名了那些课程
  • 五、执行原生SQL
    • 1、raw()方法
    • 2、执行原生查询

一、多对一

正向操作

如果一个模型有外键字段,通过这个模型对外键的操作,叫做正向

1、改

给学生对象,赋值channel字段

方法一

s.channel_id=关联模型对象.id

In [29]: s=Student.objects.get(id=3)

In [32]: ch1=Channel.objects.get(id=4)

In [33]: s.channel_id=ch1.id

In [34]: s.save()

方法二

s.channel=关联模型对象

In [35]: s=Student.objects.get(id=4)

In [36]: ch1=Channel.objects.get(id=5)

In [37]: s.channel=ch1

In [38]: s.save()

2、删

把一个学生对象的channel字段删除,如果想要删除一个外键,定义模型类时定义外键字段需要有null=True的设置
s.channel=None 直接赋值外键为None
s.save()

In [40]: s=Student.objects.get(id=4)
In [41]: s.channel=None
In [42]: s.save()

或者
s.channel_id=None 直接赋值外键为None
s.save()

In [43]: s.channel_id=None
In [44]: s.save()

查看sql

In [45]: print(connection.queries[-1])
{'sql': "UPDATE `t_student` SET `name` = 'james', `age` = 18, `phone` = '13888888888', `address` = NULL, `create_tim
e` = '2023-01-06 07:07:17.669711', `channel_id` = NULL WHERE `t_student`.`id` = 4", 'time': '0.000'}

3、查

涉及跨表查询

反向操作

一个模型如果被另外一个模型的外键关联,那么通过这个模型对关联它的模型进行的操作叫反向

在这个模型的对象上,有一个反向字段,它的名字默认以关联模型名的小写加上_set构成,所以在Channel模型的对象上,有一个反向字段student_set,这个字段是一个关系型管理器,可以操作Student模型

In [48]: ch1.student_set
Out[48]: <django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager at
0x1950e19ad90>

案例1:查询百度渠道下的所有学生信息

ch1.student_set.all():是查询集

In [46]: ch1=Channel.objects.get(id=5)

In [51]: ch1.student_set.all()
Out[51]: <QuerySet [<Student: james>, <Student: harden>]>

In [52]: print(connection.queries[-1])
{'sql': 'SELECT `t_student`.`id`, `t_student`.`name`, `t_student`.`age`, `t_student`.`phone`, `t_student`.`address`,
 `t_student`.`create_time`, `t_student`.`channel_id` FROM `t_student` WHERE `t_student`.`channel_id` = 5 ORDER BY `t
_student`.`id` ASC LIMIT 21', 'time': '0.015'}

案例2:新增一个百度渠道下的学生

ch1.student_set.create(name='happy')

In [53]: ch1.student_set.create(name='happy')
Out[53]: <Student: happy>

In [54]: print(connection.queries[-1])
{'sql': "INSERT INTO `t_student` (`name`, `age`, `phone`, `address`, `create_time`, `channel_id`) VALUES ('happy', N
ULL, NULL, NULL, '2023-01-07 08:19:56.927533', 5) RETURNING `t_student`.`id`", 'time': '0.015'}

1、增

直接创建Student对象

直接通过关系型管理器创建学生对象

channel1=Channel.objects.get(id=2)
channel1.student_set.create(name=‘happy’)

2、改

方法一:add()

把多个学生对象添加进渠道的关联对象集中

案例1:将s1,s2,s3添加到百度渠道中

channel1.student_set.add(模型对象1,模型对象2,......)

In [55]: s1,s2,s3=Student.objects.all()[:3]

In [57]: channel1=Channel.objects.get(id=5)

In [58]: channel1.student_set.add(s1,s2,s3)

In [59]: print(connection.queries[-1])
{'sql': 'UPDATE `t_student` SET `channel_id` = 5 WHERE `t_student`.`id` IN (2, 3, 4)', 'time': '0.000'}

方法二:替换对象集

channel1.student_set.set([模型对象1,模型对象2,......])
这个set方法会先清空clear,后添加

案例2:将channel1模型对象下设置为学生s1和s2,之前不管channel1下面有多少学生都置为None

In [60]: channel1.student_set.set([s1,s2])

3、删

这里的删,是删关系,从channel对象的关联对象集中删除

a、从相关对象中清空指定的模型对象

案例1:清除某个渠道中的某些学生

ch1.student_set.remove(模型对象1,模型对象2,......)

In [64]: s1,s2,s3=Student.objects.all()[:3]

In [65]: channel1.student_set.remove(s1)

In [66]: print(connection.queries[-1])
{'sql': 'UPDATE `t_student` SET `channel_id` = NULL WHERE (`t_student`.`channel_id` = 5 AND `t_student`.`id` IN (2))
', 'time': '0.000'}

b、从相关对象中清空所有的模型对象

案例2:清除某个渠道中的所有的学生

channel1.student_set.clear()

In [67]: channel1.student_set.clear()

In [68]: print(connection.queries[-1])
{'sql': 'UPDATE `t_student` SET `channel_id` = NULL WHERE `t_student`.`channel_id` = 5', 'time': '0.000'}

4、查

关联管理器的查询和普通管理器没有区别

a、查所有

ch1.student_set.all():这里的查所有,有个前提条件,就是ch1的关联学生集合

b、查询来自抖音渠道的学生名叫kobe的学生

方法一

ch1.student_set.filter(name='kobe')

方法二

Student.objects.filter(channel__name='抖音',name='kobe')

In [75]: q1=Student.objects.filter(channel__name='抖音',name='kobe')

In [76]: q2=ch1.student_set.filter(name='kobe')

In [77]: print(q1.query)
SELECT `t_student`.`id`, `t_student`.`name`, `t_student`.`age`, `t_student`.`phone`, `t_student`.`address`, `t_stude
nt`.`create_time`, `t_student`.`channel_id` FROM `t_student` INNER JOIN `t_channel` ON (`t_student`.`channel_id` = `
t_channel`.`id`) WHERE (`t_channel`.`name` = 抖音 AND `t_student`.`name` = kobe) ORDER BY `t_student`.`id` ASC

In [78]: print(q2.query)
SELECT `t_student`.`id`, `t_student`.`name`, `t_student`.`age`, `t_student`.`phone`, `t_student`.`address`, `t_stude
nt`.`create_time`, `t_student`.`channel_id` FROM `t_student` WHERE (`t_student`.`channel_id` = 5 AND `t_student`.`na
me` = kobe) ORDER BY `t_student`.`id` ASC

c、自定义关联关系字段

在外键字段中使用related_name,可以自定义反向字段

channel = models.ForeignKey('Channel',
                                on_delete=models.RESTRICT,
                                null=True,
                                help_text='外键字段') , # 不允许删除,
                                related_name='students'

那么通过students进行操作

ch1.students.filter(name='kobe')

二、多对多

多对多两端都可以获得另一端的关系管理器,类似于多对一的反向关系

1、增

增一方面指的是创建关系对象

案例1:通过学生创建课程

s1.course_set.create(name='java')
course_set字段和多对一的反向字段一样

案例2:通过课程创建学生

c1.students.create(name='hao')
在当前业务场景下,这个业务不对

另一方面这里的改是建立关联关系,也就是在第三张表中插入数据

案例3:有学生s1,s2,s3,课程c1,c2,c3,学生s1报名了c1,c2

s1.course_set.add(c1,c2)

In [13]: c1=Course.objects.all()[0]

In [14]: c2=Course.objects.all()[1]

In [15]: c3=Course.objects.all()[2]

In [16]: s1,s2,s3=Student.objects.all()[:3]

In [17]: s1.student_set.add(c1,c2)

In [22]: print(connection.queries[-1])
{'sql': 'INSERT IGNORE INTO `t_course_students` (`course_id`, `student_id`) VALUES (1, 2), (2, 2)', 'time': '0.015'}

案例4:学生s2,s3报名了c2

c2.students.add(s2,s3)

In [23]: c2.students.add(s2,s3)

In [24]: print(connection.queries[-1])
{'sql': 'INSERT IGNORE INTO `t_course_students` (`course_id`, `student_id`) VALUES (1, 3), (1, 4)', 'time': '0.015'}

2、删

同多对一,也有remove和clear

案例5:学生s1,去掉课程c1的报名

s1.course_set.remove(c1)

In [25]: s1.course_set.remove(c1)

In [26]: print(connection.queries[-1])
{'sql': 'DELETE FROM `t_course_students` WHERE (`t_course_students`.`student_id` = 2 AND `t_course_students`.`course_id` I
N (2))', 'time': '0.000'}

案例6:课程c2,去掉学生s2的报名

In [27]: c2.students.remove(s2)

In [28]: print(connection.queries[-1])
{'sql': 'DELETE FROM `t_course_students` WHERE (`t_course_students`.`course_id` = 1 AND `t_course_students`.`student_id` I
N (3))', 'time': '0.000'}

案例7:清空clear

s.course_set.clear()

c.students.clear()

3、改

这里的改是建立关联关系

案例8:修改学生s1的报名为c1和c2,如果学生s2还有其他的报名,会被删掉

s1.course_set.set([c1,c2])

In [29]: s1.course_set.set([c1,c2])

In [30]: print(connection.queries[-1])
{'sql': 'INSERT IGNORE INTO `t_course_students` (`course_id`, `student_id`) VALUES (2, 2)', 'time': '0.000'}

案例9:修改课程c1的报名为s1和s2,如果还有其他的学生报名, 也会被删掉

c1.students.set([s1,s2])

4、查

一般多对多,主要用来查。

案例10:查报名了某个课程的学生

c1.students.all()

案例11:查某个学生报名的课程

s1.course_set.all()

多对多字段都是关系管理器,查询方法和默认管理器一致

可定义的反向字段名

同多对一

students = models.ManyToManyField('Student',
                                      help_text='报名学生',
                                      verbose_name='报名学生'),
                                      related_name='courses'

s1.courses.all()

三、一对一

一对一和多对一很像
一对一字段,指向的是关系模型的一个对象
在被关联的模型对象上,默认有一个字段,以关联模型名的小写作为名称。
所以student对象上,有一个字段studentdetail。这个字段指向StudentDetail的对象。
如果student对象还没有关联,调用这个字段会报错

在StudentDetail对象上有一个student字段,它指向Student对象

1、增

一般一对一字段的模型,在创建的时候,必须传递一对一关系的对象

案例1:给某个学生添加学生详情

StudentDetail.objects.create(student=s1,city='北京',salary=20000)

In [36]: StudentDetail.objects.create(student=s1,city='北京',salary=20000)
Out[36]: <StudentDetail: kobe>

In [37]: print(connection.queries[-1])
{'sql': "INSERT INTO `t_student_detail` (`student_id`, `city`, `company`, `station`, `salary`) VALUES (2, '北京', NULL, '
测试开发', '20000') RETURNING `t_student_detail`.`id`", 'time': '0.000'}

2、删

案例2:删除某个学生的学生详情

s1.studentdetail.delete()

3、改

案例3:修改某个学生的学生详情

s1.studentdetail.city='北京'
s1.save()

In [47]: StudentDetail.objects.create(student=s3,city='北京',salary=20000)
Out[47]: <StudentDetail: james>

In [48]: s3.studentdetail.city='长沙'

In [49]: s3.studentdetail.save()

案例4:修改某个学生详情对应学生的信息

sd.student.name='zs' sd.student.save()

4、查

不存在查

四、跨表查询

案例1:例如查询年龄大于18岁的学生都报名了那些课程?

Course.objects.filter(students__age__18)

In [51]: Course.objects.filter(students__age__gt=18)
Out[51]: <QuerySet [<Course: python开发>, <Course: 测试开发>]>

In [52]: print(connection.queries[-1])
{'sql': 'SELECT `t_course`.`id`, `t_course`.`name` FROM `t_course` INNER JOIN `t_course_students` ON (`t_course`.`id` = `t
_course_students`.`course_id`) INNER JOIN `t_student` ON (`t_course_students`.`student_id` = `t_student`.`id`) WHERE `t_st
udent`.`age` > 18 LIMIT 21', 'time': '0.000'}

Course.objects.filter(students__age__gt=18).distinct():过滤

In [54]: Course.objects.filter(students__age__gt=18).distinct()
Out[54]: <QuerySet [<Course: python开发>, <Course: 测试开发>]>

In [55]: print(connection.queries[-1])
{'sql': 'SELECT DISTINCT `t_course`.`id`, `t_course`.`name` FROM `t_course` INNER JOIN `t_course_students` ON (`t_course`.
`id` = `t_course_students`.`course_id`) INNER JOIN `t_student` ON (`t_course_students`.`student_id` = `t_student`.`id`) WH
ERE `t_student`.`age` > 18 LIMIT 21', 'time': '0.000'}

案例2:查询报名了python课程的学生?

Student.objects.filter(course__name__contains='python开发')

In [57]: Student.objects.filter(course__name__contains='python开发')
Out[57]: <QuerySet [<Student: kobe>]>

In [58]: print(connection.queries[-1])
{'sql': "SELECT `t_student`.`id`, `t_student`.`name`, `t_student`.`age`, `t_student`.`phone`, `t_student`.`address`, `t_st
udent`.`create_time`, `t_student`.`channel_id` FROM `t_student` INNER JOIN `t_course_students` ON (`t_student`.`id` = `t_c
ourse_students`.`student_id`) INNER JOIN `t_course` ON (`t_course_students`.`course_id` = `t_course`.`id`) WHERE `t_course
`.`name` LIKE BINARY '%python开发%' ORDER BY `t_student`.`id` ASC LIMIT 21", 'time': '0.000'}

案例3:查询百度渠道的学生,报名了那些课程

Course.objects.filter(students__channel__name='百度')

In [3]: Course.objects.filter(students__channel__name='抖音')
Out[3]: <QuerySet [<Course: python开发>, <Course: 测试开发>, <Course: 测试开发>]>

通过关系字段加双下划线进行跨表查询。

五、执行原生SQL

1、raw()方法

返回查询集,通过在管理器上调用raw方法来实现

q=Student.objects.raw('select id,name' from t_student where id=2)

In [6]: q=Student.objects.raw('select id,name  from t_student where id=2')

In [7]: q
Out[7]: <RawQuerySet: select id,name  from t_student where id=2>

打印sql

In [8]: print(q.query)
select id,name  from t_student where id=2

取值

In [9]: q[0]
Out[9]: <Student: kobe>

In [10]: q[0].name
Out[10]: 'kobe'

In [11]: q[0].age
Out[11]: 20

2、执行原生查询

执行调用原生数据驱动执行sql

with connection.cursor() as cursor:
    cursor.execute("select * from t_student")
    one=cursor.fetchone()
    print(one)
    two=cursor.fetchmany(2)
    print(two)
    all=cursor.fetchall()
    print(all)

执行结果

(2, 'kobe', 20, None, None, datetime.datetime(2023, 1, 1, 15, 26, 3, 84534), 5)
((3, 'li', 20, None, None, datetime.datetime(2023, 1, 1, 15, 26, 3, 84534), 1), (4, 'james', 18, '13888888888', None, datetime.datetime(2023, 1, 6, 7, 7, 17, 669711), 5))
((5, 'kelai', 22, '13688888888', None, datetime.datetime(2023, 1, 6, 7, 7, 17, 850752), 1), (6, 'kd', 19, '13888888777', None, datetime.datetime(2023, 1, 6, 7, 7, 17, 875757), 4), (7, 'harden', 18, '13888878228', None, datetime.datetime(2023, 1, 6, 7, 21, 25, 347180), 4), (8, 'curry', 22, '13688883388', None, datetime.datetime(2023, 1, 6, 7, 21, 25, 347180), 1), (9, 'ad', 19, '13888855577', None, datetime.datetime(2023, 1, 6, 7, 21, 25, 347180), 1), (10, 'happy', None, None, None, datetime.datetime(2023, 1, 7, 8, 19, 56, 927533), 4))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】遨游在多线程的知识体系中(二)

前言&#xff1a;一、分析上篇多线程不安全原因1. count 操作是三个步骤&#xff0c;load add save2. 多个线程之间的调度是无序的&#xff0c;两个线程的上述三个操作可能存在多种不同的相对顺序3. 线程针对变量的修改不是原子的4. 内存可见性5.指令重排序二、synchronize 关键…

Java中clone的浅拷贝和深拷贝区别以及方法详解

克隆定义 在 Java 中&#xff0c;克隆是创建原始对象的精确副本的过程。它本质上意味着能够创建一个与原始对象具有相似状态的对象。 复制对象&#xff0c;首先要分配一个和源对象同样大小的空间&#xff0c;在这个空间中创建一个新的对象。 new对象和clone区别 使用new操作符创…

Python批量采集无水印短视频内容

前言 短视频流行起来可不是一年两年了&#xff0c;现在很多年轻人都在玩短视频&#xff0c;有些的单纯就是看看&#xff0c;而有些的就是自己发视频 我每天刷视频&#xff0c;一刷就停不下来&#xff0c;应该还是有蛮多人跟我一样的吧 那有没有想法用自己所学的python知识&a…

Linux管道——进程间通信(匿名管道、命名管道)

文章目录一、进程间通信1.1 进程间通信的概念1.2 进程间通信的目的1.3 进程间通信的本质1.4 进程间通信的分类二、管道2.1 匿名管道① 匿名管道的使用场景② 匿名管道实现通信的原理③ 创建匿名管道 pipe函数④ fork共享管道⑤ 匿名管道的五个特点⑥ 匿名管道的四种特殊情况2.2…

开发模型和测试模型,考点归纳,你都记住了吗?

目录 前言 一、开发模型 1.1、瀑布模型 1.2、螺旋模型 1.3、迭代模型和增量模型 1.4、敏捷模型 敏捷开发最流行的方式——scrum模型 二、测试模型 2.1、V模型 2.2、W模型&#xff08;双V模型&#xff09; 前言 对于模型&#xff0c;需要重点掌握特点&#xff0c;缺点&…

模板编程:constexpr +特例化 判断质数

重点&#xff1a; 1.constexpr 函数支持在编译期间完成计算 2.特例化是模板中一种定义 using namespace std;//编译期进行判断 constexpr bool isPrime(unsigned int p) {for (unsigned int d2;d<p/2;d){if (p % d 0){return false;}}return p > 1; }template<int…

python爬虫入门

基础知识 HTTP协议 我们浏览网页的浏览器和手机应用客户端与服务器通信几乎都是基于HTTP协议&#xff0c;而爬虫可以看作是一个另类的客户端&#xff0c;它把自己伪装成浏览器或者手机应用客户端&#xff0c;按照自己的逻辑贪婪的向服务器索取数据&#xff0c;如何向服务器索…

【实操篇】Linux的网络环境及其配置

目录 ●Linux网络环境原理图&#xff08;NAT模式&#xff09; ●虚拟网络编辑器对虚拟网卡ip进行修改&#xff08;VMnet-&#xff09; ●查看网关( VMnet8->WLAN) ●Linux网络ip配置 1.修改配置文件去获取固定ip 2.自动获取ip连接网络 ●Linux网络环境原理图&#xff…

【vue2】计算属性(computed)与侦听器(watch)详解

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;计算属性与侦听属性的用法 目录&#xff08;文末有给大家准备好的Xmind思维导图&#xf…

JAVA单商户商城系统源码,前(vue)后(SpringBoot)端分离,支持多平台(h5,小程序,app)

前言 完整代码下载地址&#xff1a;JAVA单商户商城系统源码 linjiashop 是一个基于Spring Boot和Vue.js的web商城系统 linjiashop 包含了商城的后台管理系统,手机h5&#xff0c;小程序版本 linjiashop 采用web-flash作为底层基础框架搭建&#xff0c;开发过程遇到问题请多阅…

Js中闭包的概念和具体使用

前言闭包在js里面是一个比较抽象的概念,但在面试里,是一个必问的话题,往往面试官希望你列举一些使用闭包的例子或手写一个闭包闭包,简单一句话讲就是能够读取其他函数内部变量的函数,当需要函数内容部的变量被外部的代码所访问时那闭包就非常有用了的,如今,很多框架里面的高级特…

Spring整合Mybatis和Junit

文章目录1 Spring整合Mybatis环境搭建整合步骤使用的注解详解2 Spring整合Junit整合Junit步骤使用的注解详解1 Spring整合Mybatis 大体需要做两件事&#xff0c; 第一件事是:Spring要管理MyBatis中的SqlSessionFactory 第二件事是:Spring要管理Mapper接口的扫描 具体该如何实现…

6.Isaac教程--在 C++ 中开发 Codelet

在 C 中开发 Codelet 本教程的目标是用 C 开发两个小码&#xff1a;第一个实际上是一台“ping”的机器&#xff0c;而第二个侦听并摄取“ping”消息。 对于本教程&#xff0c;不需要外部依赖项或特殊硬件。 文章目录在 C 中开发 Codelet创建新应用程序为应用程序创建一个新目录…

【Linux】Linux的基本指令(一)

文章目录1、ls 指令2、pwd 命令3、cd 指令4、touch 指令5、mkdir 指令6、rmdir和rm 指令7、man 指令8、cp 指令9、mv 指令10、cat11、echo(输出&#xff0c;输入&#xff0c;追加重定向)12、wc13、more14、less1、ls 指令 语法&#xff1a; ls[选项][目录或文件] 功能&#xff…

2. 矩阵(matrix)、数组、列表(list)、数据框(data.frame.....)

课程视频链接&#xff1a;https://www.bilibili.com/video/BV19x411X7C6?p1 本笔记参照该视频&#xff0c;笔记顺序做了些调整【个人感觉逻辑顺畅】&#xff0c;并删掉一些不重要的内容 系列笔记目录【持续更新】&#xff1a;https://blog.csdn.net/weixin_42214698/category_…

电脑总是开机黑屏,开机两次才能成功的解决办法:更新BIOS(七彩虹H410M-T PRO)

参考&#xff1a;七彩虹主板更新BIOS的方法 前段时间电脑出问题了&#xff0c;每当我第一次开机都会黑屏&#xff0c;要强制关机第二次开能开机&#xff0c;导致每次都开机很久很久&#xff0c;心情也不好 有时候开机等他一会&#xff0c;大概两分钟&#xff0c;会报如下错误&a…

C++课程成绩管理与分析系统[2023-01-07]

C课程成绩管理与分析系统[2023-01-07] C实习指导书 编写&#xff1a;潘林 修订&#xff1a;邓吉秋 一、实习目的 学生通过此次实习&#xff0c; 应达到如下要求&#xff1a; 熟练使用一种 C开发环境&#xff0c;包括 IDE 与编译器&#xff1b;掌握 C程序的编写 过程与调试&…

Sentinel 是什么

Sentinel是什么 Sentinel 官网&#xff1a;introduction | Sentinel 随着微服务的流行&#xff0c;服务与服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征 丰富…

Rancher部署分布式任务调度系统XXL-JOB通过拉取Docker公共镜像方式

通过Rancher部署分布式任务调度系统XXL-JOB我了解到有两种方式&#xff0c;一种是拉取xxl-job的源代码打包通过Jenkins部署&#xff0c;另一种简单的是直接拉取官方镜像&#xff0c;本文主要讲后面这种。 1、打开Docker公共镜像仓库&#xff0c;搜索xxl-job&#xff0c;复制镜…

GNN笔记系列 3

GNN笔记系列 21.Graph1.1Directed Graphs1.2Symmetric Graphs1.3Unweighted Graphs2.Graph Shift Operators(GSO)2.1Degree Matrix2.2Laplacian Matrix2.3Graph Shift Operator SSS3.Graph Signals4.Graph Convolutional Filters5.Time convolutions and graph convolutions6.G…