3

私は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) は何ですか?

4

2 に答える 2

1

それが作成か更新かを事前に本当に知らない場合、私はそれを行う特別な方法を知りません。これを効率的に実行できる特別な SQL 構文は確かに存在しないため (*)、提供される実装は基本的にコードと同じことを行います。

(*: MySQL には ON DUPLICATE KEY UPDATE および REPLACE メカニズムがありますが、主キーだけでなく、UNIQUE キーの一致でトリガーされるため、少し危険な場合があります。Oracle には、醜い MERGE ステートメントがあります。しかし、これらは、SQLObject が実際に使用できない非標準の拡張機能です。)

于 2009-08-23T09:38:35.867 に答える