ORM及数据库模型 - yann学长的运维开发指南30

in #devops8 years ago

说明

目前的进度及后续的课程
http://www.iamyann.com/images/0515/20180515174205.png
(html comment removed: more)

介绍

在上节的内容中,填写的内容是无法保持的,所以本节会介绍ORM,使用其比直接操作数据库方便一点.

今天的具体内容如下:

  • 给ORM的测试
  • 定义Item
  • 继承save属性
  • 构造lists_item表
  • 定义text属性
  • 生成数据库字段
  • 定义默认值

给ORM的测试

先写一个测试类,给ORM用

vi lists/tests.py

http://www.iamyann.com/images/0515/20180515174605.png

内容为保存两个item到数据库,再查询数据库中的所有,看是不是有两个
最后调出两个数据看和测试期望值是否匹配

定义Item

运行测试,报无法导入Item模块

ImportError: cannot import name 'Item'

去models.py里建立Item类

vi lists/models.py

from django.db import models

class Item(object):
    pass

继承save属性

再测试发现没有save属性

first_item.save()
AttributeError: 'Item' object has no attribute 'save'

去models.py里建立Item类

vi lists/models.py

from django.db import models

class Item(models.Model):
    pass

从Model类继承相关属性

构造lists_item表

再次测试,报没有表 lists_item

django.db.utils.OperationalError: no such table: lists_item

开始建造结构

python manage.py makemigrations
# 查看生成的文件
ls lists/migrations
0001_initial.py  __init__.py  __pycache__

定义text属性

再次测试,报没有text属性

AttributeError: 'Item' object has no attribute 'text'

于是写入text的定义

vi lists/models.py

class Item(models.Model):
    text = models.TextField()

生成数据库字段

再次测试,报没有lists_item.text行

django.db.utils.OperationalError: no such column: lists_item.text

这是因为之前都是对数据库的设计,其实还没有定入数据库

python manage.py makemigrations

这时运行数据库,会有提示没有默认值,这时选择2退出去字段的默认值

定义默认值

vi lists/models.py

class Item(models.Model):
    text = models.TextField(default='')

再次迁移并运行测试,测试成功

python manage.py makemigrations
python manage.py test lists

预告

今天的内容,繁杂且乱,基于正式的开发,是不用这个样子操作的,但对于学习,这样的流程是很好的

通过一步步说明了,操作ORM的需求,每个语句为什么要写

基于长度考虑,我会尽量减少代码的演示,控制表达. 力求说明白,简短表达.

现在还在过渡期,请大家逐渐习惯一下,因为我自己也觉得,手机上看自己写的东西没那么舒服.所以开始改变.

http://hero.iamyann.com/blog_webchat.jpg