Create
对应关系:
- Model Class -- Database Table
- 实例对象 -- 数据库中的一行(record)
Tom = People(name='Tom', age=18)
Tom.save()
# ----------
# 使用 create() 时,不用调用 save()
People.objects.create(name='Tom', age=18) # 返回对象
Update
Tom = People.objects.get(name='Tom')
Tom.age = 20
Tom.save()
# 将所有设置为 100 岁
Tom = People.objects.all().update(age=100)
Retrieve
QuerySet
代表一个集合,类似数组,不支持负数索引
People.objects.all() -- return: QuerySet
People.objects.order_by(-field_name) -- return: QuerySet (可以包含多个fieldname, 负号表示反序)
People.obejcts.filter(lookup) -- return: QuerySet
People.objects.exclude(lookup) -- return: QuerySet
People.objects.get(lookup) -- return: 第一个匹配的对象
# 两个 lookup 在数据库表示用 AND 相连:lookup1 AND lookup2
People.obejcts.filter(lookup1, lookup2) -- return: QuerySet
People.obejcts.filter(lookup1).exclude(lookup2)
Lookup 表达式
Lookup 格式:fieldName__lookupType
(双下划线)
Lookup Type:
- exact / iexact
- contains / icontains
- startswith / istartswith
- endswith / iendswith
-
lt / lte
(less than / less that equal) -
gt / gte
(great than / great than equal)
- 以
i
开头表示忽略大小写exact
是隐含的(默认)
# 以下两行代码相当
People.objects.filter(age=18)
People.objects.filter(age__exact=18)
# 名字以 Tom 开头的人
People.objects.filter(name__startswith='Tom')
F() & Q()
F()
用于引用项的值,来和自身比较
People.objects.filter(first_name = F('last_name'))
-
F()
支持基本数学操作
Q()
用于 SQL 中的 OR 语句
# 筛选出 18 岁或 19 岁的人
People.objects.filter(Q(age=18) | Q(age=19))
Delete
delete 调用于 实例对象 或 QuerySet
People.objects.get(name='Tom').delete()
# 删除 People 中的所有对象
People.obejcts.all().delect()
网友评论