如何在sqlobject中创建create_or_update?

时间:2009-08-23 07:35:00

标签: python coding-style sqlobject

我正在使用SQLobject,到目前为止还无法找到“在数据库中更新行的优雅解决方案,或者如果它不存在则创建一个新行。”

目前我使用以下有些复杂的代码:

args = dict(artnr=artnr, name=name, hersteller='?', hersteller_name='?')
if cs.datamart.ArtNrNameHersteller.selectBy(artnr=artnr).count():
    row = cs.datamart.ArtNrNameHersteller.selectBy(artnr=artnr)[0]
    row.set(**args)
else:
    cs.datamart.ArtNrNameHersteller(**args)

显然,这远不是明确的,强大的,优雅的或快速的。什么是正确的方式(TM)才能做到这一点?

2 个答案:

答案 0 :(得分:1)

我不知道有什么特别的方法,当你真的不知道它是创建还是更新时。当然没有特殊的SQL语法可以有效地执行此操作(*),因此提供的任何实现基本上都与您的代码相同。

(*:好吧,MySQL有ON DUPLICATE KEY UPDATE和REPLACE机制,但是它们在任何UNIQUE键上都会触发,而不仅仅是主键,这可能有点危险;而且Oracle有一个丑陋的罪恶MERGE但是这些是SQLObject无法真正使用的非标准扩展。)

答案 1 :(得分:1)

使用高级API在SQLObject中无法做到这一点。您可以使用SQLBuilder Update来完成,只需使用未记录的Replace而不是Update