基本数据访问

一旦你创建了模型,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试试看,不过,还是让我们先解决一点烦人的小问题。