Django Book: основы доступа к данным

Автор: | 03/03/2015
 

django_logo_2Предыдущая часть.

После того как вы создали модели, вы можете использовать высокоуровневый API, который предоставляет Django для работы с ними.

Выполните команду python manage.py shell  и введите следующее:

 

In [1]: from books.models import Publisher

In [2]:
Do you really want to exit ([y]/n)? y
19:12:46 [setevoy@venti /var/www/django/example] $ python manage.py shell

In [1]: from books.models import Publisher

In [2]: p1 = Publisher(name='Apress', address='2855 Telegraph Avenue',
   ...: city='Berkeley', state_province='CA', country='U.S.A.',
   ...: website='http://www.apress.com/')

In [3]: p1.save()

In [4]: p2 = Publisher(name="O'Reilly", address='10 Fawcett St.',
   ...: city='Cambridge', state_province='MA', country='U.S.A.',
   ...: website='http://www.oreilly.com/')

In [5]: p2.save()

In [6]: publisher_list = Publisher.objects.all()

In [7]: print(publisher_list)
[<Publisher: Publisher object>, <Publisher: Publisher object>]

Рассмотрим, что выполняет этот код:

  • Мы импортируем класс модели Publisher, что даёт нам возможность работать с базой данных, которая содержит издателей.
  • Мы создаём объект Publisher, указывая значения для каждого поля – name, address и так далее.
  • Что бы сохранить объект в базу – мы используем вызов save(). Django выполняет соответствующий SQL вызов INSERT.
  • Что бы получить список издателей из базы – используется атрибут Publisher.objects. Для получения всего списка издателей – мы используем вызов Publisher.objects.all(). Django выполняет соответствующий SQL вызов  SELECT.

Один момент, который стоит уточнить, если вы не обратили на него внимание в примере выше. Когда вы создаёте объект, используя Django API, Django но не сохраняет объект в базу данных, пока вы не вызовете метод save():

p1 = Publisher(...)
# p1 ещё не сохранён в базе
p1.save()
# а теперь - сохранён

Если вы хотите создать объект и сохранить его в базу одним запросом – используйте метод objects.create(). Следующий пример эквивалентен предыдущему примеру:

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

На самом деле – вы можете делать очень многое с помощью Django API, но для начала – давайте разберёмся с некоторыми небольшими сложностями.

Продолжение – Django Book: отображение строк моделей.