gpt4 book ai didi

python - 使用静态方法的 GAE/P 事务

转载 作者:行者123 更新时间:2023-11-28 22:41:10 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用事务来组织应用引擎代码。目前我有一个单独的 python 文件,其中包含我所有的交易功能。对于与实体密切相关的交易,我想知道为交易使用 @staticmethod 是否有意义。

这是一个简单的例子:

class MyEntity(ndb.Model):
n = ndb.IntegerProperty(default=0)

@staticmethod
@ndb.transactional # does the order of the decorators matter?
def increment_n(my_entity_key):
my_entity = my_entity_key.get()
my_entity.n += 1
my_entity.put()

def do_something(self):
MyEntity.increment_n(self.key)

increment_n 与实体定义相关联会很好,但我从未见过有人这样做,所以我想知道这是否是个坏主意。

我的解决方案:

根据 Brent 的回答,我实现了这个:

class MyEntity(ndb.Model):
n = ndb.IntegerProperty(default=0)

@staticmethod
@ndb.transactional
def increment_n_transaction(my_entity_key):
my_entity = my_entity_key.get()
my_entity.increment_n()

def increment_n(self):
self.n += 1
self.put()

这样我就可以将所有与实体相关的代码保存在一个地方,并且我可以根据需要轻松使用或不使用事务版本。

最佳答案

是的,在这种情况下使用 @staticmethod 是有意义的,因为该函数不使用类或实例 (self)。

是的,装饰器的顺序很重要,如@Kekito 稍后的回答中所述。

关于python - 使用静态方法的 GAE/P 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32833920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com