Rumah > pangkalan data > tutorial mysql > Bagaimana Saya Boleh Mencapai INSERT ... PADA DUPLICATE KEY UPDATE Fungsi dalam SQLAlchemy?

Bagaimana Saya Boleh Mencapai INSERT ... PADA DUPLICATE KEY UPDATE Fungsi dalam SQLAlchemy?

Susan Sarandon
Lepaskan: 2024-11-23 21:21:12
asal
229 orang telah melayarinya

How Can I Achieve INSERT ... ON DUPLICATE KEY UPDATE Functionality in SQLAlchemy?

KEMASKINI KUNCI DUPLICATE Elegant dalam SQLAlchemy

SQLAlchemy tidak mempunyai penyelesaian yang lancar untuk melaksanakan operasi "INSERT ... ON DUPLICATE KEY UPDATE" menggunakan lapisan ORMnya. Walau bagaimanapun, terdapat penyelesaian untuk mencapai kefungsian yang sama.

Sokongan MySQL Terbina dalam

Untuk pangkalan data MySQL, SQLAlchemy kini menyediakan sokongan terbina dalam untuk ON DUPLICATE KEY UPDATE. Ini boleh dicapai menggunakan sintaks berikut:

inserter = my_table.insert()
inserter.execute(list_of_dictionaries)
Salin selepas log masuk

Diparameterkan PADA KEMASKINI KUNCI PENDUA

Untuk memasukkan klausa ON DUPLICATE KEY UPDATE dalam pernyataan SQL yang dijana untuk yang lain pangkalan data, anda boleh menggunakan penghias untuk menambah yang dikehendaki rentetan:

@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

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

Fungsi ORM untuk Kekunci Utama

Untuk objek ORM di mana kunci unik ialah kunci utama, fungsi session.merge() SQLAlchemy boleh digunakan untuk meniru PADA KEMASKINI KUNCI PENDULIKASI fungsi:

session.merge(ModelObject)
Salin selepas log masuk

Pelaksanaan Tersuai untuk Kekunci Bukan Utama

Untuk kekangan unik bukan kunci utama, fungsi tersuai yang menyerupai get_or_create() Django boleh dibuat untuk mencapai tingkah laku yang diingini:

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

Atas ialah kandungan terperinci Bagaimana Saya Boleh Mencapai INSERT ... PADA DUPLICATE KEY UPDATE Fungsi dalam 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