Skip to content

Latest commit

 

History

History
54 lines (41 loc) · 2.16 KB

python34.md

File metadata and controls

54 lines (41 loc) · 2.16 KB

第34课:模型(二)

管理员

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

配图34