Пакет google.appengine.ext.db содержит определения следующих функций:
Выполняет запрос одного или нескольких объектов с использованием указанных значений их ключей.
Параметры:
Если функции передан один экземпляр класса Key, то возвращаемое значение будет экземпляром соответствующего класса Model или None, если объект с заданным ключом в хранилище не обнаружен. Если функции передан список экземпляров класса Key, то возвращаемым значением будет соответствующий список экземпляров класса модели, с указанием значений None в тех случаях, когда объект с соответствующим ключом не существует.
Смотрите описание метода Model.get().
Помещает один или несколько экземпляров класса модели в хранилище.
Параметры:
Если в параметре передано несколько экземпляров модели, то их сохранение происходит в одной транзакции. Поэтому подразумевается, что все эти объекты, передаваемые за один вызов функции, будут относиться к одной группе. Смотрите раздел Ключи и группы объектов.
Возвращает объект типа Key (если в параметре указан единственный экземпляр модели) или список объектов типа Key (в том случае, если задано множество экземпляров), которые соответствуют помещенным в хранилище экземплярам модели.
Производит удаление одного или нескольких экземпляров класса в хранилище.
Параметры:
Если в параметре передано несколько ключей или экземпляров модели, выполнение их удаления производится в одной транзакции. Поэтому подразумевается, что все эти объекты будут относиться к одной группе. Вызов функции с указанием нескольких значений не может быть использован для объектов, относящихся к разным группам. Смотрите раздел Ключи и группы объектов.
Производит запуск указанной функции с заданными операциями работы с данными как одну транзакцию. Если во время транзакции произойдет выдача исключения, то все произведенные изменения в хранилище будут восстановлены к прежним значениям.
Параметры:
Если транзакционная функция возвращает какое-то значение, то функция run_in_transaction() также прозрачно передаст его вызвавшему ее коду.
Если функция сгенерирует исключение, то транзакция будет откачена. Если функция сгенерирует исключение Rollback, то оно не будет повторно выдано в вызвавшем ее коде. Для любых других исключений действует обратная операция - исключение будет повторно выдано в вызвавшем коде.
Хранилище использует оптимистичные блокировки данных и выполняет повтор транзакции. Если транзакция не может быть успешно зафиксирована, то функция run_in_transaction() выполнит ее снова и будет пытаться зафиксировать ее несколько раз. Так как функция с транзакцией может быть вызвана не один раз для одной и той же операции, то она не должна содержать какой-нибудь код, подразумевающий ее успешное выполнение.
Если в результате нескольких попыток транзакция так и не была зафиксирована, к примеру из-за блокировки данных другими пользователями, то выдается исключение TransactionFailedError.
Для получения дополнительной информации о транзакциях, обратитесь к разделу Транзакции.
def decrement(key, amount=1):
counter = db.get(key)
counter.count -= amount
if counter.count < 0: # не позволяем счетчику принимать отрицательные значения
raise db.Rollback()
db.put(counter)
q = db.GqlQuery("SELECT * FROM Counter WHERE name = :1", "foo")
counter = q.get()
db.run_in_transaction(decrement, counter.key(), amount=5)