2009-08-23 4 views
3

J'utilise SQLobject et à ce jour n'était pas en mesure de trouver une solution élégante pour « mise à jour dans la ligne db ou créer un nouveau si elle n'existe pasComment faire create_ou_update dans sqlobject?

Actuellement, j'utiliser le code suivant quelque peu alambiquée.

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) 

il est évident que cela est loin d'être benignes concise, robuste, élégant ou rapide. quelle est la bonne façon (TM) pour le faire?

Répondre

1

Je ne sais pas d'une manière particulière pour le faire , quand vous ne savez vraiment pas à l'avance si c'est une création ou une mise à jour te. Il n'y a certainement pas de syntaxe SQL spéciale qui puisse le faire efficacement (*), donc toute implémentation fournie ferait essentiellement la même chose que votre code. (*: Bien, MySQL a les mécanismes ON DUPLICATE KEY UPDATE et REPLACE, mais ils déclenchent sur n'importe quelle touche UNIQUE non seulement la clé primaire, qui peut être un peu dangereuse, et Oracle a le moche-comme-péché Instruction MERGE, mais il s'agit d'extensions non standard que SQLObject ne peut pas vraiment utiliser.)

1

Il n'existe aucun moyen de le faire dans SQLObject à l'aide d'API de haut niveau. Vous pouvez le faire en utilisant Update de SQLBuilder, il suffit d'utiliser non documenté Replace au lieu de Update.

Questions connexes