Django中QuerySet

1. QuerySet

概念

  • QuerySet 是 Django ORM (Object-Relational Mapping) 中的对象,用于表示从数据库查询出来的一组数据。
  • 可以看作是数据库查询结果的抽象表示,包含零个或多个模型实例。

特性

  1. 延迟加载:
    • QuerySet 是惰性的,只有在需要时才会执行真正的数据库查询。
    • 例如,调用 list()、遍历、或转换为其他数据结构时会触发查询。
  2. 链式操作:
    • 支持链式方法调用(如 .filter().exclude().order_by()),以构造复杂的查询。
  3. 可迭代:
    • 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 内置的字符串数据类型,用于表示文本数据。

特性

  1. 不可变:
    • 字符串一旦创建,就无法修改。
    • 对字符串的操作会生成一个新的字符串对象。
  2. 支持多种操作:
    • 拼接、切片、查找、替换等。
  3. 灵活表示:
    • 支持单引号、双引号或三引号的文本表示。

示例

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()) 转换成字符串 直接表示文本数据,无需转换
posted @ 2024-11-18 14:29  XieBuWan  阅读(11)  评论(0编辑  收藏  举报