Manager是为Django模型提供的数据库查询接口,Django应用中的每个模型都至少存在一个Manager。
$ python manage.py shell
>>> from polls.models import Person
>>> Person.objects
<django.db.models.manager.Manager object at 0x10b49bb70>
>>> Person.objects.all()
<QuerySet [<Person: Person object (1)>, <Person: Person object (2)>]>
我们使用Person模型上的Manager构造QuerySet从数据库检索对象。
事务是指具有原子性的一系列数据库操作。即使是程序崩溃,数据库也会确保这些操作要么全部完成(commit)要么全部都未执行(rollback)。
Django 默认的事务行为是自动提交。
工作原理:将每个HTTP请求封装在一个事务中,配置中的参数 ATOMIC_REQUESTS 设置为 True(默认为 False)。在调用试图方法前,Django 先生成一个事务。如果响应能正常生成,Django 会提交该事务。而如果视图出现异常,Django 则会回滚该事务。
你还可以在视图代码中执行子事务,会使用 atomic。
先了解这些概念,以后再深入这块。
Web应用的开发就是一个持续的过程,其数据库表结构也处于不断增删改的迭代过程中,一套完整的数据库维护机制显得非常重要,Django 为此提供了数据库迁移功能很好的应对这项工作。
主要的命令有:
$ python manage.py makemigrations polls # 生成迁移文件,如:0001_initial.py
$ python manage.py sqlmigrate polls 0001 # 生成SQL,可看看是不是自己想要的结果
$ python manage.py migrate # 执行迁移,完成创建新表等任务
Django提供了以下几类数据库函数:
- 比较和转换函数:如Cast、Coalesce、Greatest、Least
- 日期函数:如Now ...
- 文本函数:如Length、Lower、Upper ...
- Window函数:如Rank ...
>>> from datetime import datetime
>>> dt = datetime(2019, 2, 10)
>>> (dt.isoweekday() % 7) + 1
1
1 for Sunday, 2 for Monday, through 7 for Saturday.
配图来自Twitter:@kagachi_SK
