Pony Orm - '如果不存在则插入'声明

时间:2018-03-01 07:32:52

标签: python ponyorm

我想知道如何运行只在项目尚不存在时才将项目插入数据库的查询。我正在使用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={...})

这有可能吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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