• 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
  • 相关阅读:
    DNS 截持模拟及环境搭建
    Ant、Gradle、Python三种打包方式的介绍
    oc/c/c++混编老文,写的很好,mark
    好文!关于iOS下的正则表达式实战案例
    Java设计模式——享元模式
    Java 消息机制之回调详解
    windows版爬取csdn
    14.6.2 Configuring InnoDB for Read-Only Operation
    dump iot表
    heap表按字符串和数值型排序规则
  • 原文地址:https://www.cnblogs.com/ranxf/p/11686422.html
Copyright © 2020-2023  润新知