1

我想知道如何运行一个查询,仅当它不存在时才将它插入到数据库中。我使用 json 作为实体,所以它们看起来像这样:

class Person(db.Entity):
    json = Required(Json)

name = "Alice"

if not Person.exists(lambda person: person['name'] == name):
    Person(json={'name': name, """ lots more fields """})

但这似乎执行了两个查询,从而减慢了操作速度。理想情况下,我想要类似的东西

Person.insert_if_not_exists(json={...})

这可能吗?

4

2 回答 2

1

目前 Pony 不支持get_or_create作为单个命令,我们计划稍后添加

于 2018-08-03T11:43:13.523 回答
0

我认为您必须在插入过程中捕获重复的异常,如下所述:

    try:
        with pony.orm.db_session:
            table(**row)
    except pony.orm.core.TransactionIntegrityError as e:
        if 'UNIQUE constraint failed' not in unicode(e):
            # Ignore duplicate
        else:
            raise
于 2019-08-14T09:46:13.623 回答