Heim > Datenbank > MySQL-Tutorial > Wie kann ich INSERT ... ON DUPLICATE KEY UPDATE mit SQLAlchemy effizient nutzen?

Wie kann ich INSERT ... ON DUPLICATE KEY UPDATE mit SQLAlchemy effizient nutzen?

Mary-Kate Olsen
Freigeben: 2024-11-24 10:31:11
Original
324 Leute haben es durchsucht

How Can I Efficiently Use INSERT ... ON DUPLICATE KEY UPDATE with SQLAlchemy?

Elegant ON DUPLICATE KEY UPDATE mit SQLAlchemy

Frage: Gibt es eine nahtlose Möglichkeit, INSERT auszuführen ... ON DUPLICATE KEY UPDATE in SQLAlchemy mit einer ähnlichen Syntax wie inserter.insert().execute(list_of_dictionaries)?

Antwort:

Eingebaute Funktionalität für MySQL (ab Version 1.2)

Speziell für MySQL bietet SQLAlchemy jetzt Unterstützung für ON DUPLICATE KEY UPDATE.

ON DUPLICATE KEY UPDATE in SQL-Anweisungen

Um ON DUPLICATE KEY UPDATE explizit in das generierte SQL einzuschließen, können Sie den @compiles-Dekorator verwenden:

from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.expression import Insert

@compiles(Insert)
def append_string(insert, compiler, **kw):
    s = compiler.visit_insert(insert, **kw)
    if 'append_string' in insert.kwargs:
        return s + " " + insert.kwargs['append_string']
    return s
Nach dem Login kopieren

Dadurch können Sie die erforderliche Zeichenfolge an die generierte Einfügung anhängen Aussage:

my_connection.execute(my_table.insert(append_string='ON DUPLICATE KEY UPDATE foo=foo'), my_values)
Nach dem Login kopieren

ON DUPLICATE KEY UPDATE-Funktionalität im ORM

Obwohl SQLAlchemy keine explizite ORM-Unterstützung für ON DUPLICATE KEY UPDATE oder MERGE hat, verfügt es über die Sitzung .merge()-Funktion. Diese Funktion ist jedoch nur für Primärschlüssel wirksam.

Um die ON DUPLICATE KEY UPDATE-Funktionalität für Nicht-Primärschlüssel zu simulieren, können Sie eine Funktion wie die folgende implementieren:

def get_or_create(session, model, defaults=None, **kwargs):
    instance = session.query(model).filter_by(**kwargs).first()
    if instance:
        return instance
    else:
        params = dict((k, v) for k, v in kwargs.iteritems() 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 mit SQLAlchemy effizient nutzen?. 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