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

Mary-Kate Olsen
Lepaskan: 2024-11-24 10:31:11
asal
303 orang telah melayarinya

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
Salin selepas log masuk

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)
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan