SUR MISE À JOUR DE CLÉ EN DUPLICATE dans SQLAlchemy
Question : Existe-t-il un moyen concis d'effectuer un "INSERT .. Opération "ON DUPLICATE KEY UPDATE" utilisant SQLAlchemy. ORM ?
Réponse :
SQLAlchemy inclut la prise en charge intégrée de « ON DUPLICATE KEY UPDATE » pour MySQL après la version 1.2. Pour utiliser cette fonctionnalité, reportez-vous à la solution fournie ici : https://stackoverflow.com/a/48373874/319066
Approche des instructions SQL :
Pour les situations générales ou des bases de données non MySQL, vous pouvez utiliser un décorateur @compiles pour inclure "ON DUPLICATE KEY UPDATE" dans l'instruction SQL générée. Un exemple est fourni ici : https://github.com/somada141/sqlalchemy-insert-duplicate-update
Approche ORM :
L'ORM de SQLAlchemy ne prend pas directement en charge "LORS DE LA MISE À JOUR DE LA CLÉ EN DOUBLE." Cependant, pour les mises à jour de clés primaires, vous pouvez utiliser la fonction session.merge(), qui recherche un enregistrement existant et le met à jour en conséquence.
Implémentation personnalisée pour les clés non primaires :
Pour les situations impliquant des mises à jour de clés non primaires, vous pouvez créer une fonction similaire à get_or_create() de Django qui vérifie d'abord un enregistrement existant et effectue une mise à jour ou une insertion en conséquence. Un exemple d'une telle fonction est fourni ici :
def get_or_create(session, model, defaults=None, **kwargs): instance = session.query(model).filter_by(**kwargs).first() if instance: return instance else: params = {k: v for k, v in kwargs.items() if not isinstance(v, ClauseElement)} if defaults: params.update(defaults) instance = model(**params) return instance
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!