我必须更新 peewee 数据库()中的许多行(每行增加一个值SqliteDatabase
)。有些对象可以不创建,所以我必须在使用它们之前使用默认值创建它们。我会使用 peewee 文档(原子更新)中的方法,但我不知道如何混合model.get_or_create()
和in [my_array]
.
所以我决定在事务中进行查询以在最后提交一次(我希望这样做)。
为什么我写堆栈溢出是因为我不知道如何db.atomic()
在 Huey 中使用线程(我用 4 个工人测试过),因为.atomic()
锁定了连接(peewee.OperationalError: database is locked
)。我试过使用@huey.lock_task
,但它不是我发现的问题的解决方案。
我班的代码:
class Article(Model):
name = CharField()
mention_number = IntegerField(default=0)
class Meta:
database = db
我的任务代码:
@huey.task(priority=30)
def update(names): # "names" is a list of strings
with db.atomic():
for name in names:
article, success = Article.get_or_create(name=name)
article.mention_number += 1
article.save()