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)
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)
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)
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
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!