社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django QuerySet 就学那么一点点,一点点就够了

梦想橡皮擦 • 3 年前 • 489 次点击  

橡皮擦,一个逗趣的互联网高级网虫。新的系列,让我们一起进入 Django 世界。

已经完成的文章

@[toc](滚雪球学 Python 第三轮)

四、Django QuerySet

4.1 Django Shell

为了便于调试 Django 内置的查询,可以在命令行运行下述代码。

python manage.py shell

运行之后进行到 Python 环境,继而可以进行数据的基本查询。

>>> from blog.models import Blog
>>> Blog.objects.all()
<QuerySet [<Blog: 报告总监,他...在代码里面 “下毒” 了>, <Blog: 去年我年薪 30W,今年我一天做 3 顿饭>, <Blog: 2021年,我已经说服 27 个人不上培训机构了>]>
>>>

导入 Blog 模块之后,使用 Blog.objects.all() 获取全部数据,数据类型为 Django QuerySet 。也可以将数据进行循环输出。

blogs = Blog.objects.all()
for blog in blogs:
    print(blog)

注意在 Shell 中的代码格式问题。

20210326164848100[1].png

还可以查看 Blog.objects.all() 具体的查询语句

>>> Blog.objects.all().query
<django.db.models.sql.query.Query object at 0x0000000004186358>
>>> str(Blog.objects.all().query)
'SELECT "blog_blog"."id", "blog_blog"."title", "blog_blog"."content", "blog_blog"."creatr_time" FROM "blog_blog"'
>>>

对于 Django 来说,还是 ORM 框架,底层也是 SQL 语句。

4.2 其他查询方法

除了 Blog.objects.all() 以外,在 Django 中还有其它查询方法,例如 Blog.objects.get()

>>> Blog.objects.get(id=1)
<Blog: 报告总监,他...在代码里面 “下毒” 了>

该方法当查询不到数据时,会出现如下错误:

blog.models.Blog.DoesNotExist: Blog matching query does not exist.

如果不希望查询不到程序报错,修改代码为下述格式即可。

>>> Blog.objects.filter(id=5)
<QuerySet []>

4.3 增加数据、修改数据、删除数据

新增数据
在数据库中新增一条数据,在 Django 中是使用 Blog.objects.create(title="nnnn",content="大好人",creatr_time="2020-10-10") 实现的,注意参数名字与 Blog 类中的名字进行匹配。

>>> Blog.objects.create(title="nnnn",content="大好人",creatr_time="2020-10-10")
<Blog: nnnn>
>>> Blog.objects.all()
<QuerySet [<Blog: 报告总监,他...在代码里面 “下毒” 了>, <Blog: 去年我年薪 30W,今年我一天做 3 顿饭>, <Blog: 2021年,我已经说服 27 个人不上培训机构了>, <Blog: nnnn>]>
>>>

修改数据
修改记录就是先查后改。

>>> item = Blog.objects.get(id=3)
>>> item
<Blog: 2021年,我已经说服 27 个人不上培训机构了>
>>> item.title = "2020年,我已经说服20个人不上培训机构了"
>>> item
<Blog: 2020年,我已经说服20个人不上培训机构了>
>>> item.save()
>>> item = Blog.objects.get(id=3)
>>> item
<Blog: 2020年,我已经说服20个人不上培训机构了>
>>>

修改完需要调用 save() 函数,数据才会保存到数据库中,否则会出现下述情形。

>>> item.title= "橡皮擦测试"
>>> item
<Blog: 橡皮擦测试>
>>> item = Blog.objects.get(id=3)
>>> item
<Blog: 2020年,我已经说服20个人不上培训机构了>

删除数据
查询数据,然后在删除数据。

>>> item = Blog.objects.get(id=4)
>>> item
<Blog: nnnn>
>>> item.delete()
(1, {'blog.Blog': 1})
>>>

4.4 这篇博客的总结

本篇博客初步了解了 Django QuerySet 的基本使用,核心做的操作是一种 ORM (对象关系映射)操作,后面的博客中还会有所涉及,先掌握基本的使用方式即可。

相关阅读

  1. Python 爬虫 100 例教程,超棒的爬虫教程,立即订阅吧
  2. Python 游戏世界(更新中,目标文章数 50+,现在订阅,都是老粉)
  3. Python 爬虫小课,精彩 9 讲

今天是持续写作的第 <font color="red">120</font> / 200 天。
如果你想跟博主建立亲密关系,可以关注同名公众号 <font color="red">梦想橡皮擦</font>,近距离接触一个逗趣的互联网高级网虫。
博主 ID:梦想橡皮擦,希望大家<font color="red">点赞</font>、<font color="red">评论</font>、<font color="red">收藏</font>。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/119658
 
489 次点击