不重启服务也能玩转 ORM:用 Django Shell 快速增删改查
【摘要】 不重启服务也能玩转 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
-
打开 PyCharm 内置终端(自动激活虚拟环境)。
-
执行
python manage.py shell
- 出现
>>>
提示符即可开写。
三、一键导入模型
>>> 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)