Django -- Database API

  • https://docs.djangoproject.com/en/2.0/topics/db/queries/
  • Database API -- 完整参考
  • field lookup reference

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()

你可能感兴趣的:(Django -- Database API)