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