ad

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.8.4 Django Shell操作ORM

网友投稿 106 2023-11-07

【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第2章,第8节,由陈刚、王洪军编著。

2.8.4 Django Shell操作ORM

在2.7.1小节中,已学过了如何进入 Django 的 Shell 界面,在本小节,继续用这

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.8.4 Django Shell操作ORM

种方法来学习ORM 的操作。

这样安排有两个考量: 一是我们还没有学习如何操作 Django Admin管理后台, 我们的数据库里没有数据,就无法做下一步的实践;而使用 Django Shell,就可以手 工插入相关数据。二是通过 Django Shell,读者可以比较细致地了解一些 ORM 的语 法测试,更有利于接下来在视图中使用 ORM 功能的学习。

下面,我们进入 D:\GIT\django_demo_project\ 目录,运行 Python Manage

Shell 命令进入支持 Django 的 Shell。

进入此 Shell 后,先运行如下示例,以便了解 ORM 的基本操作。代码解释:

第1行:从 bbs 目录的 models 文件中,导入 Board 数据表。

第2行:实例化一个 Board 对象——Board。

第3行:将这个对象保存到数据库。

第4~9行:从这个对象中获取所有字段的值。

第10~11行:同样,可以修改这个对象的值,注意,要再次调用save() 方法之后才生效。

第12行:如果不想先实例化,再调用save() 方法保存,那么可以直接使用create() 方法,直接就保存到数据库当中了。

第15行:使用objects 管理器的all() 方法,可以返回包含所有记录的QuerySet。

第17行:使用objects 管理器的 get() 方法,返回的是一条唯一数据表的记录(其 中 name='Python', 就决定了数据表里只有一条记录)。

第19行:使用objects 管理器的filter() 方法,返回的是满足过滤条件的Query-Set(id__lt=3,表示的过滤条件是 id 的值小于3)。

上面是一个简单的例子,接下来,我们加大点难度,看看如何实现与外键有关的 数据库操作。因为在新增 topic 及 post 时,都涉及到用户,所以需要先运行如下命 令,新增一个管理员用户:

python manage.py createsuperuser

假设我们新增的用户名为 admin。 接着,就可以使用 python manage.py shell 进行如下操作了。

代码解释:

第1~2行:导入必要的Models 中的数据表。

第3行:获取一个用户名为 admin 的 user 实例。

第4行:获取一个名称为 Python 的 board 实例。

第5行:按 topic 数据表的要求,填充相关字段。注意,board 和 starter 是用对应的实例对象去填充的。

第6行:保存 topic 实例。

第7行:按 post 数据表的要求,填充相关字段。注意,topic 和 created_by 是用对应的实例对象去填充的。

第8行:保存 post 实例。

第9行:利用 topic 中 的 board 外键的 related_name 的关系,可以获取一个 board 下面的所有 topic 。这里利用的正是 models.py 中的 Topic 数据表:board = models.ForeignKey(Board,related_name='topics',...) 这行定义。

第11行:利用post 中的 topic 外键的 related_name 的关系,可以获取一个 topic 下面的所有 post 。这里利用的正是 models.py 中的 Post 数据表:topic =models. ForeignKey(Topic,related_name='posts',...) 这行定义。

通过前面两个实际的操作学习,读者应该了解 ORM 操作的一般套路了吧。更多的 ORM 操作技巧,需要经历更多的实际场景,才能不断提高。

有了前面的技巧铺垫,我们的数据库里 Board 、Topic 、Post 都至少有一条数据 了。接下来,就可以使用 ORM, 结合 UrlConf、视图、模板来实现一个最低功能的BBS了(这里不涉及任何前端美化工作)。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_3.8 启用公式审核功能
下一篇:《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.4.2 使用其他指定字符分列
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×