Django Book: добавление и обновление данных

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

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

Вы уже видели как добавлять данные в базу данных — создавая экземпляр модели с аргументами, например так:

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

Как мы уже говорили — такой способ не затрагивает саму базу. Запись не будет добавлена в неё, пока вы не используете вызов save():

In [6]: p.save()

Грубо, это можно перевести на язык SQL так:

INSERT INTO books_publisher
    (name, address, city, state_province, country, website)
VALUES
    ('Apress', '2855 Telegraph Ave.', 'Berkeley', 'CA',
     'U.S.A.', 'http://www.apress.com/');

Так как модель Publisher использует автоинкрементный первичный ключ id — то вызов save() выполняет ещё действие: он вычисляет значение primary key для этой записи, и добавляет его к атрибуту id экземпляра:

In [9]: print(p.id)
3

Последующие вызовы save() будут вносить запись в базу, но без создания новой записи (т.е. — выполнять UPDATE вместо INSERT):

In [10]: p.name = 'Apress Publishing'

In [11]: p.save()

Этот запрос можно перевести в SQL так:

UPDATE books_publisher SET
    name = 'Apress Publishing',
    address = '2855 Telegraph Ave.',
    city = 'Berkeley',
    state_province = 'CA',
    country = 'U.S.A.',
    website = 'http://www.apress.com'
WHERE id = 52;

Заметьте — все поля будут обновлены, а не только поле, которые мы меняем. Смотрите далее в этой главе как выполнить этот же запрос, но примерно в таком виде:

UPDATE books_publisher SET
    name = 'Apress Publishing'
WHERE id=52;

Продолжение — Django Book: выборка объектов