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
1006 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!

source:php.cn
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