Хостинг Django от «Джино»
Table of contents

Вставка и изменение данных

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

>>> 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;


Ищем Python программистов

Found misprint?
Select it with the mouse and hit Enter
Ctrl-Enter
Processed:
33 1 199 25


The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!

We are glad to hear your questions, comments or suggestions!
(Open in new tab)

Users number: 601

Русская группа

на поддержку перевода
Яндекс Яндекс.Деньги Хочу такую же кнопку
Ускорить процесс перевода!
ЯМ:41001223475816


© 2008-2012 Ruslan Popov @ gmail.com Powered by Django 1.2.5