Предыдущая часть.
Вы уже видели как добавлять данные в базу данных — создавая экземпляр модели с аргументами, например так:
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: выборка объектов




