Heim > Datenbank > MySQL-Tutorial > Wie kann ich INSERT ... ON DUPLICATE KEY UPDATE in SQLAlchemy effizient durchführen?

Wie kann ich INSERT ... ON DUPLICATE KEY UPDATE in SQLAlchemy effizient durchführen?

Barbara Streisand
Freigeben: 2024-11-25 15:14:11
Original
1058 Leute haben es durchsucht

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

AUF DUPLICATE KEY UPDATE in SQLAlchemy

Frage: Gibt es eine prägnante Möglichkeit, ein „INSERT“ durchzuführen? . ON DUPLICATE KEY UPDATE“-Operation mit SQLAlchemy ORM?

Antwort:

SQLAlchemy enthält integrierte Unterstützung für „ON DUPLICATE KEY UPDATE“ für MySQL nach Version 1.2. Um diese Funktionalität zu nutzen, lesen Sie die hier bereitgestellte Lösung: https://stackoverflow.com/a/48373874/319066

SQL-Anweisungsansatz:

Für allgemeine Situationen oder Nicht-MySQL-Datenbanken können Sie einen @compiles-Dekorator verwenden, um „ON DUPLICATE KEY UPDATE“ in die generierte SQL-Anweisung aufzunehmen. Ein Beispiel finden Sie hier: https://github.com/somada141/sqlalchemy-insert-duplicate-update

ORM-Ansatz:

ORM von SQLAlchemy unterstützt nicht direkt „AUF DUPLICATE KEY UPDATE.“ Für Primärschlüsselaktualisierungen können Sie jedoch die Funktion session.merge() verwenden, die nach einem vorhandenen Datensatz sucht und ihn entsprechend aktualisiert.

Benutzerdefinierte Implementierung für Nicht-Primärschlüssel:

Für Situationen, in denen es um nicht primäre Schlüsselaktualisierungen geht, können Sie eine Funktion ähnlich der get_or_create() von Django erstellen, die zunächst nach einem vorhandenen Datensatz sucht und eine Aktualisierung oder Einfügung durchführt entsprechend. Ein Beispiel für eine solche Funktion finden Sie hier:

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
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich INSERT ... ON DUPLICATE KEY UPDATE in SQLAlchemy effizient durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage