Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan INSERT dengan Cekap ... PADA KEMASKINI KUNCI DUPLICATE dalam SQLAlchemy?

Bagaimana untuk Melaksanakan INSERT dengan Cekap ... PADA KEMASKINI KUNCI DUPLICATE dalam SQLAlchemy?

Barbara Streisand
Barbara Streisandasal
2024-11-25 15:14:111087semak imbas

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

PADA DUPLICATE KEY UPDATE dalam SQLAlchemy

Soalan: Adakah terdapat cara ringkas untuk melakukan "INSERT .. . ON DUPLICATE KEY UPDATE" operasi menggunakan SQLAlchemy's ORM?

Jawapan:

SQLAlchemy termasuk sokongan terbina dalam untuk "KEMASKINI KUNCI PENDUPLICATE" untuk MySQL selepas versi 1.2. Untuk menggunakan fungsi ini, rujuk kepada penyelesaian yang disediakan di sini: https://stackoverflow.com/a/48373874/319066

Pendekatan Pernyataan SQL:

Untuk situasi umum atau pangkalan data bukan MySQL, anda boleh menggunakan penghias @compiles untuk memasukkan "ON DUPLICATE KEY KEMASKINI" dalam pernyataan SQL yang dihasilkan. Contoh disediakan di sini: https://github.com/somada141/sqlalchemy-insert-duplicate-update

Pendekatan ORM:

ORM SQLchemy tidak menyokong secara langsung "PADA KEMASKINI KUNCI PENDUA." Walau bagaimanapun, untuk kemas kini kunci utama, anda boleh menggunakan fungsi session.merge(), yang menyemak rekod sedia ada dan mengemas kininya dengan sewajarnya.

Pelaksanaan Tersuai untuk Kunci Bukan Utama:

Untuk situasi yang melibatkan kemas kini bukan kunci utama, anda boleh mencipta fungsi yang serupa dengan get_or_create() Django yang pertama menyemak rekod sedia ada dan melakukan kemas kini atau memasukkan dengan sewajarnya. Contoh fungsi sedemikian disediakan di sini:

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

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan INSERT dengan Cekap ... PADA KEMASKINI KUNCI DUPLICATE dalam 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