Maison > base de données > tutoriel mysql > Comment effectuer efficacement INSERT... ON DUPLICATE KEY UPDATE dans SQLAlchemy ?

Comment effectuer efficacement INSERT... ON DUPLICATE KEY UPDATE dans SQLAlchemy ?

Barbara Streisand
Libérer: 2024-11-25 15:14:11
original
1115 Les gens l'ont consulté

How to Efficiently Perform INSERT ... ON DUPLICATE KEY UPDATE in SQLAlchemy?

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
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal