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!