Django学习系列13:Django ORM和第一个模型

ORM—对象关系映射器,是一个数据抽象层,描述存储在数据库中的表,行和列。处理数据库时,可以使用熟悉的面向对象方式,写出更好的代码。

在ORM的概念中,类对应数据库中的表,属性对应列,类的单个实例表示数据库中的一行数据。

Django对ORM提供了良好的支持,学习ORM的绝佳方法是单元测试中使用她,因为单元测试能按照指定方式使用ORM。

在tests.py中新建一个类

class ItemModelTest(TestCase):

    def test_saving_and_retrieving_items(self):
        first_item = Item()
        first_item.text = 'The first (ever) list item'
        first_item.save()

        second_item = Item()
        second_item.text = 'Item the second'
        second_item.save()

        saved_items = Item.objects.all()
        self.assertEqual(saved_items.count(), 2)

        first_saved_item = saved_items[0]
        second_saved_item = saved_items[1]
        self.assertEqual(first_item.text, 'The first (ever) list item')
        self.assertEqual(second_item.text, 'Item the second')

从上面的代码可以看出,在数据库中创建新记录的过程很简单:先创建一个对象,再为一些属性赋值,然后调用.save()函数。

Django提供了一个查询数据库的API,即类属性.objects,再使用可能时最简单的查询方法.all(),取回这个表的全部记录。得到的结果是一个类似列表的对象,从这个对象中可以提取出单个对象,然后还可以再调用其他函数,如.count()。

接着检查存储在数据库中的对象,看保存的信息是否正确。

运行单元测试:

AssertionError: '1: Buy peacock feathers' not found in ['1: Use peacock feathers to make a fly']

下面进入另一个单元测试/编写代码循环,在models.py中写入一些代码,让它有内容可导入。

from django.db import models

# Create your models here.
from django.db import models

class Item(object):
    pass

单元测试,

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

为了给Item类提供save方法,也为了让这个类变成真正的Django模型,要让它继承Model类:

from django.db import models

# Create your models here.
from django.db import models

class Item(models.Model):
    pass

再次运行单元测试,会看到一个数据库错误:

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

 

上一篇:python-进阶-优雅的python写法


下一篇:Linux入门(2)- Putty(window远程Linux的终端) 的使用