iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Django模型层如何实现多表关系创建和多表操作
  • 115
分享到

Django模型层如何实现多表关系创建和多表操作

2023-06-20 16:06:18 115人浏览 泡泡鱼
摘要

本篇内容介绍了“Django模型层如何实现多表关系创建和多表操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言创建表关系多表数据操作

本篇内容介绍了“Django模型层如何实现多表关系创建和多表操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 前言

  • 创建表关系

  • 多表数据操作 - 增删改

    • 一对多&一对一关系 - 增删改

      • 增加数据

      • 删除数据

      • 修改数据

    • 多对多关系 - 增删改

      • 增加多对多关系 - add()

      • 删除多对多关系 - remove()

      • 修改多对多关系 - set()

      • 清空第三张表某个对象的绑定关系 - clear()

  • 多表查询

    • 子查询

      • 正向查询

      • 反向查询

    • 联表查询

      • 正向查询

      • 反向查询

  • 聚合查询

    • 分组查询

      • F与Q查询

        • F查询

          • Q查询

          • djanGo开启事务

            前言

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

            创建表关系

            注意:在实际开发中不推荐使用外键建立表关系即不使用级联更新和级联删除,而是推荐使用逻辑上的外键关系建立表关系。

            上述的四张表中,图书和出版社这两表的关系属于一对多的关系,外键建立在查询频率高的一方。作者和作者详情表属于一对一关系,外键建立在查询频率高的一方,作者和图书属于多对多关系,需要第三张表存储关系,建议将外键建在查询频率高的一方。创建表时一定要执行数据库迁移命令哦~

            创建表关系时可以先将表模型创建出来,然后再添加外键字段,另外在使用django ORM创建外键关系时,关联的外键字段会自动在字段后加_id,表与表之间的关系默认以主键作为关联字段。另外在创建表关系时,不建议使用实质的外键进行关联,而是通过使用逻辑上的关系来指定表关系。

            class Book(models.Model):    name = models.CharField(max_length=60, verbose_name='图书名')    # 浮点数字段,max_digits表示数字共8位, decimal_place表示小数点占2位    price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name='图书价格')    inventory_num = models.IntegerField(verbose_name='库存数量')    sell_num = models.IntegerField(verbose_name='卖出数量')    # 一对多关系外键字段创建使用 ForeigenKey(to='表名'),默认关联主键字段, db_constraint=Flase表示不建立实质的外键关系,只是逻辑上的关系    publish = models.ForeignKey(to='Publish', on_delete=models.DO_NOTHING, db_constraint=False, verbose_name='外键关联出版社')    # 多对多关系,使用ManyToManyField(to='表名'),author是一个虚拟的字段,主要是用来告诉ORM,书籍和作者是多对多的关系,而且ORM会自动创建多对多关系的第三张    author = models.ManyToManyField(to='Author', on_delete=models.DO_NOTHING, db_constraint=False, verbose_name='外键关联作者')class Publish(models.Model):    name = models.CharField(max_length=12, verbose_name='出版社名称')class Author(models.Model):    name = models.CharField(max_length=10, verbose_name='作者名称')    # 一对一关系使用OneToOneField(to='表名')    author_detail = models.OneToOneField(to='AuthorDetail', on_delete=models.DO_NOTHING, db_constraint=False, verbose_name='外间关联作者详情')class AuthorDetail(models.Model):    age = models.IntegerField(verbose_name='年龄')    phone = models.CharField(max_length=11, verbose_name='手机号')

            另外还需补充一点,多对多的表关系共有三种创建方式,分别是全自动创建、半自动创建和全手动创建:

            # 全自动创建 - ManyToManyField,一般这种方式可以满足需求'''使用全自动创建多对多关系的优点就是无需手动创建第三张表,非常方便,django ORM直接提供操作第三张表关系的方法缺点就是无法扩展第三张关系表'''class Book(models.Model): name = models.CharField(max_length=32)    authors = models.ManyToManyField(to='Author')    class Author(models.Model):    name = models.CharField(max_length=32)            # 纯手动创建 -  ForeignKey手动创建第三张表'''第三张表完全取决于手动的扩展,但是需要写的代码较多,而且无法使用ORM提供的简单方法'''class Book(models.Model):    name = models.CharField(max_length=32)    class Author(models.Model): name = models.CharField(max_length=32) class Book2Author(models.Model):    book_id = models.ForeignKey(to='Book')    author_id = models.ForeignKey(to='Author')    # 半自动创建,通过ManyToManyField的参数控制第三张表class Book(models.Model):    name = models.CharField(max_length=32)    authors = models.ManyToManyField(        to='Author', # 告诉ORM不需要自动帮忙创建第三张关系表        through='Book2Author', # 告诉ORM第三张关系表对应的表的外键字段        through_fields=('book','author')  # 通过哪两个字段关联表,当前在哪张表,就先写哪个表的关联字段                                     )class Author(models.Model):    name = models.CharField(max_length=32)     class Book2Author(models.Model):    book = models.ForeignKey(to='Book')    author = models.ForeignKey(to='Author')

            多表数据操作 - 增删改

            首先介绍多表操作的增删改操作,因为多表的查询数据操作稍微麻烦一点,单独另外开小灶。

            一对多&一对一关系 - 增删改

            一对一和一对多的增删改操作基本是一致的。

            增加数据

            增加数据有两种方式,一种方式是通过实际字段来添加,另一种方式是通过虚拟字段对象赋值添加。

            # 方式1:通过实际字段book_obj = models.Book.objects.create(name='哈利波特', price=10.2, publish_id=1)# 方式2,先获取出版社对象,再将书籍和出版社通过出版社对象进行关联publis_obj = models.Publish.objects.filter(pk=1).first()book_obj = models.Book.objects.create(name='哈利波特', price=10.2, publish=publis_obj)
            删除数据

            需要说明一点,在实际项目开发中删除数据并不是真的删除了,而是使用一个布尔类型的字段标识该数据是否删除。
            删除数据的时候如果不指定on_delete=models.DO_NOTHING默认是级联更新级联删除的。

            models.Publish.objects.filter(pk=1).delete()
            修改数据

            修改数据同增加数据一样有两种方式。

            # 方式1models.Book.objects.filter(pk=1).update(publish_id=1)# 方式2pub_obj = models.Publish.objects.filter(pk=2).first()models.Book.objects.filter(pk=1).update(publish=pub_obj)

            多对多关系 - 增删改

            首先需要明确的是,多对多的增删改是在操作第三张关系表,但是第三张关系表是django自动创建的,如何通过代码进入第三张表呢?多对多的外键关系被建在book表,多对多的外键字段是author字段,因此通过book_obj.author即可操作第三张表了。
            对于django自动创建的第三张表的多对多关系,django提供了额外的方法对数据进行操作。

            增加多对多关系 - add()

            add()方法给第三张关系表添加数据,括号内既可以传数字也可以传对象,并且都支持多个同时操作。

            # 方式1,直接添加id值book_obj = models.Book.objects.filter(pk=1).first()book_obj.author.add(1)  # 增加 1 1记录,即id为1的书绑定id为1的作者book_obj.author.add(2, 3)   # 增加两条记录,1 2 和 1 3# 方式2,通过对象添加关系book_obj = models.Book.objects.filter(pk=2).first()author_obj1 = models.Author.objects.filter(pk=1).first()author_obj2 = models.Author.objects.filter(pk=2).first()author_obj3 = models.Author.objects.filter(pk=3).first()book_obj.author.add(author_obj1)    # 增加1条记录book_obj.author.add(author_obj2, author_obj3) # 增加2条
            删除多对多关系 - remove()

            remove()方法用来为第三张表删除数据,同样的,括号内既可以传数字也可以传对象,并且支持多条数据同时操作。

            # 方式1:直接删除值book_obj = models.Book.objects.filter(pk=1).first()book_obj.author.remove(2)  # 删除book_id为1和author_id都为2的记录book_obj.authors.remove(1, 3)  # 删除多条# 方式2:通过对象删除author_obj1 = models.Author.objects.filter(pk=2).first()author_obj2 = models.Author.objects.filter(pk=3).first()book_obj.authors.remove(author_obj1, author_obj2)
            修改多对多关系 - set()

            set()方法用来修改第三张表,该方法是一个覆盖操作,用新的关系覆盖之前的关系,该方法的参数必须是一个列表或者元组,指出数字或对象,也支持多条数据同时操作。

            # 方式1:直接通过值进行修改book_obj = models.Book.objects.filter(pk=1).first()book_obj.author.set([2])  # 将book_id为1对应的author_id修改为2book_obj.authors.set([1, 2])  # 将书的作者设置为id=1 和id=2的作者# 方式2:通过对象进行修改author_obj2 = models.Author.objects.filter(pk=2).first()author_obj3 = models.Author.objects.filter(pk=3).first()book_obj.authors.set([author_obj2, author_obj3])
            清空第三张表某个对象的绑定关系 - clear()

            clear()方法会清空第三张关系表中某个对象的绑定关系。

            book_obj = models.Book.objects.filter(pk=1).first()book_obj.author.clear()

            多表查询

            在进行多表查询操作前,需要了解一个概念,什么是正向查询和反向查询。

            • 正向查询:外键在哪个表中,查询关联的表就是正向查询,比如通过书籍查询出版社;

            • 反向查询:被关联的表查外键字段所在的表就是反向查询,比如通过出版社查询书籍。

            子查询

            如果查询比较复杂时可以采用子查询的方式,子查询就是分步骤查询的意思,先查询得到的结果作为后查询的条件。

            正向查询

            正向查询按字段,如果有多个结果需要外键字段.all(),那么怎么判断查询的结果有多个呢?如果在不加.all()的情况下得到的结果是应用名.模型名.None比如first.Author.None这种情况下说明ORM 语句没有错误,只是查询到的结果有多个,就需要加.all()。当查询结果只有一个时得到的是一个模型对象,如果为多个就是QuerySet对象。

            # 一对多关系查询:查询书籍主键为1的书籍由哪个出版社出版book_obj = models.Book.objects.filter(pk=1).first()res = book_obj.publish  # Publish object (1)print(res.name)# 多对多关系查询:查询数据主键为1的作者book_obj = models.Book.objects.filter(pk=1).first()res = book_obj.author  # first.Author.None,说明结果有多个res_many = book_obj.author.all()  # <QuerySet [<Author: Author object (1)>, <Author: Author object (2)>]>    # 一对一关系查询:查询作者lili的年龄author_obj = models.Author.objects.filter(name='lili').first()res = author_obj.author_detailprint(res.phone)
            反向查询

            反向查询如果是一对一的话是表名小写,如果是一对多或者多对多时反向查询是表明小写——set,另外如果有多个结果需要在表明小写后再加_set.all(),判断结果是否有多个的方法与正向查询相同。当查询结果只有一个时得到的是一个模型对象,如果为多个就是QuerySet对象。

            # 一对多关系查询,查询出版社是东方出版社出版的书publish_obj = models.Publish.objects.filter(name='东方').first()res = publish_obj.book_set.all()  # <QuerySet [<Book: Book object (1)>, <Book: Book object (2)>]># 多对多关系查询,查询作者是lili写过的书author_obj = models.Author.objects.filter(name='lili').first()res = author_obj.book_set  # first.Book.None,说明有多个结果res_many = author_obj.book_set.all()print(res_many)  # <QuerySet [<Book: Book object (1)>]># 一对一关系查询,查询手机号是119的作者author_detail_obj = models.AuthorDetail.objects.filter(phone='119').first()res = author_detail_obj.authorprint(res.name)

            联表查询

            联表查询就是像MySQ里面sql语句的联表查询一样,只不过在django的ORM里面使用基于双下划线联表查询(跨表查询)。联表查询的可以使用一行代码查询结果,联表查询也遵循正反向关系。

            正向查询
            # 一对多关系查询:查询书籍主键为1的出版社名称和书名# 首先获取书籍对象,书籍是查询publish的基表,因此获取书名直接values('names')即可,而出版社的名字是通过外键字段跳到出版社的表中农,需要通过__找到需要的字段值res = models.Book.objects.filter(pk=1).values('name', 'publish__name')  # <QuerySet [{'name': '哈利波特', 'publish__name': '东方'}]># 多对多关系查询,查询书籍主键为1的作者姓名res = models.Book.objects.filter(pk=1).values('author__name')  # <QuerySet [{'author__name': 'lili'}, {'author__name': 'nana'}]># 一对一关系查询,查询lili的手机号和姓名res = models.Author.objects.filter(name='lili').values('name', 'author_detail__phone').first()print(res.get('name'), res.get('author_detail__phone'))
            反向查询
            # 一对多关系查询:查询数据主键为1的出版社名称和书的名字res = models.Publish.objects.filter(book__id=1).values('name', 'book__name')  # <QuerySet [{'name': '东方', 'book__name': '哈利波特'}]># 多对多关系查询:查询书籍主键为1的作者姓名和书名res = models.Author.objects.filter(book__id=1).values('name', 'book__name')  # <QuerySet [{'name': 'lili', 'book__name': '哈利波特'}, {'name': 'nana', 'book__name': '哈利波特'}]># 一对一关系查询:查询作者id是1作者的姓名和手机号res = models.AuthorDetail.objects.filter(author__id=1).values('author__name', 'phone')  # <QuerySet [{'author__name': 'lili', 'phone': '119'}]># 综合大查询:查询书籍主键是1的作者的手机号,首先获取书籍对象,书籍关联了作者表,作者表又关联了作者详情表 res = models.Book.objects.filter(pk=1).values('author__author_detail__phone')  # <QuerySet [{'author__author_detail__phone': '119'}, {'author__author_detail__phone': '120'}]>

            聚合查询

            聚合查询通常情况下是配合分组一起使用的,聚合查询就是用一些统计工具,比如最大值,最小值,平均值等,聚合函数的导入方式from django.db.models import Max, Min, Sum, Count, Avg,如果在不分组的情况下使用聚合函数需要在aggregate()方法内使用。

            from django.db.models import Min,Max,Sum,Count,Avg# 统计书的平均价格res = models.Book.objects.aggregate(Avg('price'))print(res)# 可以将这些聚合函数同时使用res = models.Book.objects.aggregate(Max('price'),Sum('price'),Count('pk'))print(res)

            分组查询

            聚合函数通常和分组一起使用,分组查询的方法是annotate,默认以models.分组依据作为分组依据,即表的主键进行分组,如果annotate()方法前面出现了values()那么就会按照values中指定的值进行分组。分组查询支持__跨表查询。

            from django.db.models import Sum, Max, Min, Avg, Count# 1.统计每本书的作者个数res = models.Book.objects.annotate(author_num=Count('author')).values('name', 'author_num')  # author_num是自己定义的字段用来存储统计出来的每本书对应的作者个数,暂时存为表中的字段# 2.统计每个出版社卖的最便宜的书的价格res = models.Publish.objects.annotate(min_price=Min('book__price')).values('name', 'min_price')# 3.统计不止一个作者的图书# 先按照图书分组,算出每本书的作者数量,再过滤出作者数量大于1的数据res = models.Book.objects.annotate(author_num=Count('author')).filter(author_num__gt=1).values('name', 'author_num')# 4.查询每个作者出版书的总价格res = models.Author.objects.annotate(sum_price=Sum('book__price')).values('name', 'sum_price')

            F与Q查询

            F查询

            F查询可以获得表中某个字段的数据值,尤其适合表中两个字段之间的比较运算,在操作字符类型的数据时,F不能直接做字符串的拼接,需要借助Concat和Value。

            from django.db.models import F# 1.查询卖出数量大于库存数量的书籍res = models.Book.objects.filter(sell_num__gt=F('inventory_num'))# 将所有书籍的价格提升20元res = models.Book.objects.update(price=F('price')+20)

            F查询对于字符串的操作需要借助Concat和Value两个方法:

            # 将所有书的名称后面加上爆款两个字from django.db.models.functions import Concatfrom django.db.models import F, Valuemodels.Book.objects.update(name=Concat(F('name'),Value('爆款')))

            Q查询

            使用filter()进行条件过滤时,采用的是逻辑与and的操作,如果想要将多个筛选条件更改为or或者not的关系则需要借助Q查询。在Q查询中|表示or的关系,~表示not的关系。

            import django.db.models import Q# 查询卖出数量大于100或者价格小于20的书籍res = models.Book.objects.filter(~Q(sell_num__gt=100) | Q(price__lt=20))

            另外Q查询还有另一个比较高级的用法,就是可以将查询条件的左边也变成字符串的形式。

            # 先产生一个Q的实例q = Q()# 修改q的连接条件的关系q.connector = 'or'q.children.append(('sell_num__gt',100))q.children.append(('price__lt',200))res = models.Book.objects.filter(q)# filter的条件是Q实例化产生的对象,每个条件默认还是and关系,可以修改print(res)

            django开启事务

            MySQL为了保证数据的安全有一个事务的机制,django既然能够连接Mysql那么django就可以支持mysql的事务机制。下述代码就是在django中开启事务:

            from django.db import transactiontry:    with transaction.atomic():   # 在with代码快内书写的所有orm操作都属于同一个事务        ...except Exception as e:    print(r)...

            “Django模型层如何实现多表关系创建和多表操作”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

            --结束END--

            本文标题: Django模型层如何实现多表关系创建和多表操作

            本文链接: https://www.lsjlt.com/news/298372.html(转载时请注明来源链接)

            有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

            本篇文章演示代码以及资料文档资料下载

            下载Word文档到电脑,方便收藏和打印~

            下载Word文档
            猜你喜欢
            • Django模型层实现多表关系创建和多表操作
              目录前言创建表关系多表数据操作 - 增删改一对多&一对一关系 - 增删改增加数据删除数据修改数据多对多关系 - 增删改增加多对多关系 - add()删除多对多关系 - rem...
              99+
              2024-04-02
            • Django模型层如何实现多表关系创建和多表操作
              本篇内容介绍了“Django模型层如何实现多表关系创建和多表操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言创建表关系多表数据操作...
              99+
              2023-06-20
            • Django之模型层(多表操作)
                一、创建模型   1,一对多关系   一本书只有一个出版社,一个出版社可以出版多本书,从而书与出版社之间就构成一对多关系,书是‘多’的一方,出版社是‘一’的一方,我们在建立模型的时候,把外键写在‘多’的一方,即我们要把外键写在book...
              99+
              2023-01-30
              模型 操作 Django
            • Django 模型层之多表操作
              一.创建模型 实例: 作者表: 拥有字段:姓名(name),性别(sex),该表与书籍表之间为多对多的关系 作者详情表: 拥有字段:地址(addr),手机号(phone),该表与作者表之间为一对一的关系 出版社表: ...
              99+
              2023-01-30
              之多 模型 操作
            • 详解解Django 多对多表关系的三种创建方式
              目录1、方式一:自动创建2、方式二:纯手动创建3、方式三:半自动创建1、方式一:自动创建 # django orm 自动帮我们创建第三张表,我的app名字是app01, 表名为:...
              99+
              2024-04-02
            • Tensorflow2.4如何搭建单层和多层Bi-LSTM模型
              这篇文章主要介绍“Tensorflow2.4如何搭建单层和多层Bi-LSTM模型”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Tensorflow2.4如何搭建单层和多层Bi-LSTM模型”文章能帮...
              99+
              2023-07-04
            • 操作MySQL实现简单的创建库和创建表
                目录              操作数据库                    创建数据库                    查看数据库                    选择数据库                  ...
              99+
              2023-09-09
              mysql
            • MySQL中如何实现多表查询操作
              本篇文章给大家分享的是有关MySQL中如何实现多表查询操作,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。create table&n...
              99+
              2024-04-02
            • MySQL如何创建多对多和一对一关系
              这篇文章主要介绍“MySQL如何创建多对多和一对一关系”,在日常操作中,相信很多人在MySQL如何创建多对多和一对一关系问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL如何创建多对多和一对一关系”的疑...
              99+
              2023-06-29
            • mysql中如何实现多表联合查询操作
              这篇文章将为大家详细讲解有关mysql中如何实现多表联合查询操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MySQL多表联合查询语法:复制代码 代码如下...
              99+
              2024-04-02
            • oracle多表关联查询如何实现
              在Oracle数据库中,可以使用SQL语句实现多表关联查询。以下是一个示例: 假设有两个表:表A和表B,它们有一个共同的字段ID可以...
              99+
              2024-04-09
              oracle
            • 基于Bootstrap table组件如何实现多层表头
              这篇文章主要为大家展示了“基于Bootstrap table组件如何实现多层表头”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于Bootstrap table...
              99+
              2024-04-02
            • Laravel如何实现视图和模型操作
              本篇内容主要讲解“Laravel如何实现视图和模型操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Laravel如何实现视图和模型操作”吧!视图简介:视图包含了应用程序渲染的HTML数据,并将...
              99+
              2023-07-04
            • sqlserver的表、视图、索引如何实现创建、修改、删除操作
              小编给大家分享一下sqlserver的表、视图、索引如何实现创建、修改、删除操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一...
              99+
              2024-04-02
            • 如何使用麒麟操作系统进行多媒体创作和编辑
              麒麟操作系统是一款基于Linux的操作系统,可以用于多媒体创作和编辑。下面是使用麒麟操作系统进行多媒体创作和编辑的步骤:1. 安装麒...
              99+
              2023-10-12
              麒麟操作系统
            • 启动Springboot项目后怎么实现自动创建多表关联的数据库
              这篇文章将为大家详细讲解有关启动Springboot项目后怎么实现自动创建多表关联的数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。sql脚本的语句就是平常的create建表语句,类似如...
              99+
              2023-06-14
            • 如何在Cacti系统中创建自定义数据源和图表模板
              在Cacti系统中创建自定义数据源和图表模板需要按照以下步骤进行: 登录Cacti系统,进入管理界面。 在左侧导航栏中选择“管理”...
              99+
              2024-03-15
              Cacti
            • 麒麟操作系统中的多用户和权限管理如何实现
              麒麟操作系统是一款基于Linux内核的自主研发的操作系统,其中多用户和权限管理是麒麟操作系统的重要功能之一。下面是麒麟操作系统中多用...
              99+
              2023-10-10
              麒麟操作系统
            • Mysql如何实现查看,创建用户、赋权、删除表用户数据库等操作
              这篇文章主要介绍Mysql如何实现查看,创建用户、赋权、删除表用户数据库等操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 创建用户、赋权、表空间--...
              99+
              2024-04-02
            • 分时操作系统是如何实现多任务处理的?
              分时操作系统的原理 分时操作系统是一种计算机操作系统,它将处理时间划分为小的时间片,称为时间片。每个正在运行的程序依次获得一个时间片,在时间片内独占地使用系统资源。通过快速切换时间片,操作系统可以制造多个程序同时运行的错觉。 调度策略 ...
              99+
              2024-03-05
              分时操作系统 多任务处理 调度 内存管理 实时系统
            软考高级职称资格查询
            编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
            • 官方手机版

            • 微信公众号

            • 商务合作