Вы уже видели как это делается: для того, чтобы вставить запись в вашу базу данных сначала надо создать экземпляр модели с помощью именованных аргументов, вот так:
>>> p = Publisher(name='Apress',
... address='2855 Telegraph Ave.',
... city='Berkeley',
... state_province='CA',
... country='U.S.A.',
... website='http://www.apress.com/')
Этот пример создания экземпляра модели не
производит изменений в базе данных. Эта запись не сохраняется в
базе данных пока не будет вызван метод
save()
:
>>> p.save()
Вышеприведённые действия с точки зрения SQL операторов выглядят так:
INSERT INTO book_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()
выполнит ещё и
вычисление значения для первичного ключа и подставит это
значение в атрибут id:
>>> p.id
52 # значение может отличаться для ваших данных
Последующие вызовы метода save()
будут
перезаписывать существующую запись, не создавая новую (т.е.,
будут выполнять SQL оператор UPDATE вместо
INSERT):
>>> p.name = 'Apress Publishing'
>>> p.save()
В SQL это будет выглядеть так:
UPDATE book_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;
Да, следует отметить то, что все поля будут обновлены, а не только те, что были изменены. В зависимости от реализации вашего приложения, такое поведение может вызвать «гонки» (race condition). См «Изменение множества объектов одним запросом» далее о том, как выполнять подобные запросы:
UPDATE books_publisher SET
name = 'Apress Publishing'
WHERE id=52;
Пред. | Уровень выше | След. |
Добавляем строковое представление модели | Начало | Выборка объектов |
1 comment | Make a comment
добавил новых пользователей, все ОК но когда обращаюсь к
developer.id выдает что таких нет(