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