• 基本数据访问

    基本数据访问

    一旦你创建了模型,Django自动为这些模型提供了高级的Python API。 运行 python manage.py shell 并输入下面的内容试试看:

    1. >>> from books.models import Publisher
    2. >>> p1 = Publisher(name='Apress', address='2855 Telegraph Avenue',
    3. ... city='Berkeley', state_province='CA', country='U.S.A.',
    4. ... website='http://www.apress.com/')
    5. >>> p1.save()
    6. >>> p2 = Publisher(name="O'Reilly", address='10 Fawcett St.',
    7. ... city='Cambridge', state_province='MA', country='U.S.A.',
    8. ... website='http://www.oreilly.com/')
    9. >>> p2.save()
    10. >>> publisher_list = Publisher.objects.all()
    11. >>> publisher_list
    12. [<Publisher: Publisher object>, <Publisher: Publisher object>]

    这短短几行代码干了不少的事。 这里简单的说一下:

    • 首先,导入Publisher模型类, 通过这个类我们可以与包含 出版社 的数据表进行交互。

    • 接着,创建一个Publisher 类的实例并设置了字段name, address 等的值。

    • 调用该对象的 save() 方法,将对象保存到数据库中。 Django 会在后台执行一条 INSERT 语句。

    • 最后,使用Publisher.objects 属性从数据库取出出版商的信息,这个属性可以认为是包含出版商的记录集。 这个属性有许多方法, 这里先介绍调用Publisher.objects.all() 方法获取数据库中Publisher 类的所有对象。这个操作的幕后,Django执行了一条SQL SELECT 语句。

    这里有一个值得注意的地方,在这个例子可能并未清晰地展示。 当你使用Django modle API创建对象时Django并未将对象保存至数据库内,除非你调用save() 方法:

    1. p1 = Publisher(...)
    2. # At this point, p1 is not saved to the database yet!
    3. p1.save()
    4. # Now it is.

    如果需要一步完成对象的创建与存储至数据库,就使用objects.create() 方法。 下面的例子与之前的例子等价:

    1. >>> p1 = Publisher.objects.create(name='Apress',
    2. ... address='2855 Telegraph Avenue',
    3. ... city='Berkeley', state_province='CA', country='U.S.A.',
    4. ... website='http://www.apress.com/')
    5. >>> p2 = Publisher.objects.create(name="O'Reilly",
    6. ... address='10 Fawcett St.', city='Cambridge',
    7. ... state_province='MA', country='U.S.A.',
    8. ... website='http://www.oreilly.com/')
    9. >>> publisher_list = Publisher.objects.all()
    10. >>> publisher_list

    当然,你肯定想执行更多的Django数据库API试试看,不过,还是让我们先解决一点烦人的小问题。