前言:本文是学习网易微专业的《python全栈工程师 - Django快速建站》课程的笔记,欢迎学习交流。同时感谢老师们的精彩传授!
一、课程目标
- 了解
ORM
语法的基本应用
二、详情解读
2.1.ORM
语法
2.1.1.对应关系
- 一个模型类 对应 一张数据库表
- 一个模型类实例 对应 数据库表中的一行记录
上节课已经有数据模型类:
class BlogArticles(models.Model):
title = models.CharField(max_length=300)
author = models.ForeignKey(User, on_delete=models.CASCADE,related_name='blog_posts')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
class Meta:
# 这里负号表示倒序,此处别忘了末尾的逗号
ordering = ('-publish', )
def __str__(self):
return self.title
2.1.2.基本操作
操作一、创建对象:
向数据库中增加一条记录,即新增一篇博客文章,亦即创建一个数据库实例。这种操作等效于SQL
中的·:insert
在项目目录下,执行下面命令:
python manage.py shell
就会有下面的交互显示结果:
在交互模式里作如下操作,作用是往数据库中插入一条数据。
>>> from django.contrib.auth.models import User
>>> from blog.models import BlogArticles
>>> admin = User.objects.get(username='admin')
>>> blog = BlogArticles(title='hello world', author=admin,body='hello, I am a programmer.')
>>> blog.save()
>>>
操作二、查询/检索对象:
要从数据库检索对象,要通过模型类的Manager
构建一个QuerySet
。
Manager
(类)是一种接口,它赋予了Django
模型操作数据库的能力。Django
应用中的每个模型拥有至少一个Manager
,默认名称是objects
。
一个Queryset
代表来自数据库中对象的一个集合。它可以有 0 个,1 个或者多个filters.Filters
,可以根据给定参数缩小查询结果量。在SQL
的层面上,QuerySet
对应SELECT
语句,而*filters*
对就类似WHERE
或 LIMIT
的限制子句。
下面演示在交互模式中的基本操作:
>>> BlogArticles.objects
<django.db.models.manager.Manager object at 0x00000000039DA0B8>
>>> blogs = BlogArticles.objects.all() #获取所有的文章
>>> blogs
<QuerySet [<BlogArticles: hello world>, <BlogArticles: Python全栈工程师>]>
>>> for blog in blogs: # 遍历所有的文章
... print(blog.id, blog.publish, blog.title, blog.author)
...
2 2020-03-04 15:25:56.363401+00:00 hello world admin
1 2020-03-04 14:57:00+00:00 Python全栈工程师 admin
>>> b = BlogArticles.objects.get(id=1) # 条件查找,查找 id=1 的文章
>>> b
<BlogArticles: Python全栈工程师>
>>> BlogArticles.objects.filter(author=admin) # 也是条件查找,查找 author=admin 的文章
<QuerySet [<BlogArticles: hello world>, <BlogArticles: Python全栈工程师>]>
>>> admin.blog_posts.all() # 反向查找 admin 用户发布的所有文章,这个好用!!!
<QuerySet [<BlogArticles: hello world>, <BlogArticles: Python全栈工程师>]>
>>>
操作三、修改保存对象:
使用实例的save()
方法,等效于SQL
:UPDATE
操作
在交互模式中的操作演示:
>>> b
<BlogArticles: Python全栈工程师>
>>> b.title = '工程师'
>>> b.title
'工程师'
>>> b.save() # 注意这里,没有这一句,保存不生效!!
>>>
操作四、删除对象:实例对象的delete()
方法。该方法返回删除的数据库记录
>>> b.delete()
(1, {'blog.BlogArticles': 1})
>>>
更多内容参考官网:https://docs.djangoproject.com/zh-hans/3.0/topics/db/queries/
三、课程小结
- 01、介绍了
ORM
语法