Rumah >pangkalan data >tutorial mysql >Bagaimana Saya Boleh Menggunakan INSERT dengan Cekap ... PADA KEMASKINI KUNCI DUA dengan SQLAlchemy?

Bagaimana Saya Boleh Menggunakan INSERT dengan Cekap ... PADA KEMASKINI KUNCI DUA dengan SQLAlchemy?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-24 10:31:11398semak imbas

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

KEMASKINI KUNCI DUPLICATE Elegant dengan SQLAlchemy

Soalan: Adakah terdapat cara yang lancar untuk melaksanakan INSERT ... ON DUPLICATE KEY UPDATE dalam SQLAlchemy menggunakan sintaks yang serupa dengan inserter.insert().execute(list_of_dictionaries)?

Jawapan:

Fungsi Terbina dalam untuk MySQL (mulai versi 1.2)

Untuk MySQL khususnya, SQLAlchemy kini menyertakan sokongan untuk ON DUPLICATE KEY UPDATE.

PADA DUPLICATE KEY UPDATE dalam SQL Statements

Untuk secara eksplisit memasukkan ON DUPLICATE KEY UPDATE dalam SQL yang dihasilkan, anda boleh menggunakan @compiles penghias:

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

Ini membolehkan anda menambahkan rentetan yang diperlukan pada sisipan yang dijana penyataan:

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

PADA KEMASKINI KUNCI DUA Fungsi dalam ORM

Walaupun SQLAlchemy tidak mempunyai sokongan ORM yang jelas untuk ON DUPLICATE KEY UPDATE atau MERGE, ia mempunyai sesi fungsi .merge(). Walau bagaimanapun, fungsi ini hanya berkesan untuk kekunci utama.

Untuk mensimulasikan kefungsian ON DUPLICATE KEY UPDATE untuk kekunci bukan utama, anda boleh melaksanakan fungsi seperti berikut:

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

Atas ialah kandungan terperinci Bagaimana Saya Boleh Menggunakan INSERT dengan Cekap ... PADA KEMASKINI KUNCI DUA dengan SQLAlchemy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn