My favorites | 中文(简体) | Sign in

函数

google.appengine.ext.db 包提供以下函数:

get(keys)

获取任何 Model 的指定键的实体。

参数:

keys
Key 对象或 Key 对象的列表。

如果提供了一个 Key,则返回值是相应 Model 类的实例,或者是 None(如果指定键没有实体)。如果提供了 Key 列表,则返回值是 Model 实例的对应列表,并且在对应 Key 不存在实体时该列表会具有 None 值。

另请参阅 Model.get()

put(models)

将一个或多个 Model 实例放置到数据库中。

参数:

models
要存储的 Model 实例或 Model 实例的列表。

如果指定了多个 Model 实例,它们可能存储于多个实体组中。在每个实体组中,所有属于该组的实体都将在一个事务中写入。请参阅键和实体组

如果在操作过程中发生错误,则肯定会抛出异常,即便某些实体其实已经写入。如果调用中的实体跨越多个实体组就可能发生这种情况。如果调用返回而没有抛出异常,则表示所有实体都已成功写入。

返回与存储的 Model 实例对应的 Key 对象(如果指定了 Model 实例)或 Key 对象的列表(如果指定了实例列表)。

delete(models)

从数据库中删除一个或多个 Model 实例。

参数:

models
要删除的 Model 实例、实体的 Key,或 Model 实例列表或实体的 Key 列表。

如同 Model.put() 一样,如果指定了多个键,它们可能位于多个实体组中。在每个实体组中,所有属于该组的实体都将在一个事务中删除。请参阅键和实体组

如果在操作过程中发生错误,则肯定会抛出异常,即便某些实体其实已经删除。如果调用中的键跨越多个实体组就可能发生这种情况。如果调用返回而没有抛出异常,则表示所有实体都已成功删除。

run_in_transaction(function, *args, **kwargs)

在一个事务中运行包含数据库更新的函数。如果代码在事务过程中抛出异常,则事务中进行的所有数据库更新都将回滚。

参数:

function
要在数据库事务中运行的函数。
*args
传递到函数的位置参数。
**kwargs
传递到函数的关键字参数。

如果函数返回一个值,run_in_transaction() 将该值返回到调用程序。

如果函数抛出异常,事务将回滚。如果函数抛出 Rollback 异常,该异常不会再次抛出。对于其他任何异常,会针对调用程序再次抛出异常。

数据库使用乐观锁定并重新尝试事务。如果无法提交函数准备的事务,run_in_transaction() 将再次调用函数,然后重复固定次数的重新尝试。由于可能针对一个事务调用多次事务函数,所以函数不应有副作用,包括对参数的修改。

例如,如果由于高冲突率而无法提交事务,将抛出 TransactionFailedError

有关事务的详细信息,请参阅事务

def decrement(key, amount=1):
  counter = db.get(key)
  counter.count -= amount
  if counter.count < 0:    # don't let the counter go negative
    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)