1. QuerySet
概念
- QuerySet 是 Django ORM (Object-Relational Mapping) 中的对象,用于表示从数据库查询出来的一组数据。
- 可以看作是数据库查询结果的抽象表示,包含零个或多个模型实例。
特性
- 延迟加载:
QuerySet
是惰性的,只有在需要时才会执行真正的数据库查询。
- 例如,调用
list()
、遍历、或转换为其他数据结构时会触发查询。
- 链式操作:
- 支持链式方法调用(如
.filter()
、.exclude()
、.order_by()
),以构造复杂的查询。
- 可迭代:
QuerySet
是一个可迭代对象,返回的是模型实例。
示例
from myapp.models import Article
# 获取所有数据
articles = Article.objects.all() # 返回一个 QuerySet
# 过滤数据
filtered_articles = Article.objects.filter(title__icontains='Python') # 返回符合条件的 QuerySet
# 转换为列表
articles_list = list(filtered_articles)
# 获取单个对象
article = Article.objects.get(id=1) # 返回单个对象,而不是 QuerySet
2. str
概念
- str 是 Python 内置的字符串数据类型,用于表示文本数据。
特性
- 不可变:
- 字符串一旦创建,就无法修改。
- 对字符串的操作会生成一个新的字符串对象。
- 支持多种操作:
- 灵活表示:
示例
text = "Hello, Django!"
# 字符串拼接
new_text = text + " Welcome to Python."
# 查找子字符串
found = "Django" in text # 返回 True
# 字符串切片
sliced_text = text[:5] # 返回 "Hello"
3. 区别总结
属性 |
QuerySet |
str |
数据类型 |
Django ORM 对象集合 |
Python 内置字符串类型 |
用途 |
用于查询和操作数据库中的模型实例 |
表示和操作文本数据 |
可变性 |
不可变(本身不能修改,但支持链式生成新查询集) |
不可变 |
延迟执行 |
是,只有在需要时才查询数据库 |
无延迟,直接执行 |
迭代特性 |
是,返回模型实例集合 |
是,返回单个字符 |
操作功能 |
支持数据库查询操作 (filter , exclude , etc.) |
支持文本操作 (split , replace , etc.) |
转换 |
需要通过显式调用 (list() , str() ) 转换成字符串 |
直接表示文本数据,无需转换 |