get_or_create:是 'get' 还是 'create'?

get_or_create: is it a 'get' or a 'create'?

AFAIK,peewee 的 Model.get_or_create() 没有 return 指示创建的标志,这与 django 的 get_or_create() 不同。有没有好的方法来检查 return 由 get_or_create() 编辑的实例是否是新创建的?

谢谢

根据源码,没办法查。另外,根据文档,不建议使用此方法。

我建议使用 try/except/else 子句。

文档中有一个部分希望对您有所帮助:http://docs.peewee-orm.com/en/latest/peewee/querying.html#get-or-create

如果缺少文档,请告诉我,我很乐意改进它们。

http://docs.peewee-orm.com/en/latest/peewee/api.html#Model.get_or_create

classmethod get_or_create(**kwargs)

尝试获取与给定过滤器匹配的行。如果没有找到匹配的行,则创建一个新行。

参数:

  • kwargs – field-name 到值的映射。
  • defaults – 创建新行时使用的默认值。

Returns:

  • 模型实例的元组和指示是否创建了新对象的布尔值。

它还警告您使用此方法可能会出现竞争条件,甚至还为您提供了一个不使用该方法的示例:

try:
    person = Person.get(
        (Person.first_name == 'John') &
        (Person.last_name == 'Lennon'))
except Person.DoesNotExist:
    person = Person.create(
        first_name='John',
        last_name='Lennon',
        birthday=datetime.date(1940, 10, 9))