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