不重启服务也能玩转 ORM:用 Django Shell 快速增删改查

举报
周杰伦本人 发表于 2025/08/31 19:57:50 2025/08/31
【摘要】 不重启服务也能玩转 ORM:用 Django Shell 快速增删改查 一、为什么需要 Django Shell?在浏览器里点点点太慢,写视图函数又需要反复重启服务。Django 自带的交互式命令行——python manage.py shell,能让你所见即所得地测试 ORM 语句,写完立刻看到结果,调试效率提升 10 倍。 二、3 步进入 Shell打开 PyCharm 内置终端(自动...

不重启服务也能玩转 ORM:用 Django Shell 快速增删改查

一、为什么需要 Django Shell?

在浏览器里点点点太慢,写视图函数又需要反复重启服务。Django 自带的交互式命令行——python manage.py shell,能让你所见即所得地测试 ORM 语句,写完立刻看到结果,调试效率提升 10 倍。

二、3 步进入 Shell

  1. 打开 PyCharm 内置终端(自动激活虚拟环境)。

  2. 执行

python manage.py shell
  1. 出现 >>> 提示符即可开写。

三、一键导入模型

>>> from book.models import BookInfo, PeopleInfo

四、增删改查 4 连击

1. 增(Create)

# 新增一本书
>>> b = BookInfo(name='射雕英雄传', pub_date='1957-01-01', read_count=0, comment_cnt=0)
>>> b.save()

# 或者一步到位
>>> BookInfo.objects.create(name='神雕侠侣', pub_date='1959-01-01')

2. 查(Read)

# 查所有
>>> BookInfo.objects.all()
<QuerySet [<BookInfo: 射雕英雄传>, <BookInfo: 神雕侠侣>]>

# 查单条
>>> BookInfo.objects.get(id=1)
<BookInfo: 射雕英雄传>

# 条件查询
>>> BookInfo.objects.filter(name__contains='射雕')
<QuerySet [<BookInfo: 射雕英雄传>]>

3. 改(Update)

>>> book = BookInfo.objects.get(id=1)
>>> book.read_count = 999
>>> book.save()

4. 删(Delete)

>>> BookInfo.objects.filter(name='神雕侠侣').delete()
(1, {'book.BookInfo': 1})

五、让打印更友好:__str__

在模型类里加几行,就能在 Shell 里看到中文而不是 BookInfo object (1)

class BookInfo(models.Model):
    ...
    def __str__(self):
        return self.name

修改后 重启 Shell 生效:

>>> BookInfo.objects.all()
<QuerySet [<BookInfo: 射雕英雄传>]>

六、Shell 里的坑 & 技巧

场景 解决
模型改了但查询结果没变 退出 exit() 再重进 Shell,重新导入模型
想批量插入测试数据 insert_data.py 放在项目根目录,然后在 Shell 里 exec(open('insert_data.py').read())
想查看 SQL 语句 >>> print(BookInfo.objects.all().query)

七、把 Shell 的代码搬到视图

Shell 里验证无误的代码,原样搬进 views.py

from django.http import JsonResponse
from book.models import BookInfo

def list_books(request):
    books = BookInfo.objects.all()
    data = [{"id": b.id, "name": b.name} for b in books]
    return JsonResponse(data, safe=False)

结语

Django Shell = ORM 的“草稿纸”。
先在 Shell 里把增删改查玩明白,再写正式视图,就能做到 一次写对,不重启、不踩坑

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。