SQLAlchemy 中的優雅ON DUPLICATE KEY UPDATE
SQLAlchemy 缺乏使用以下指令執行「INSERT: ON DUPLICATEEY.無縫解決方案它的ORM 層。但是,有一些解決方法可以實現類似的功能。
內建 MySQL 支援
對於 MySQL 資料庫,SQLAlchemy 現在提供對 ON DUPLICATE KEY UPDATE 的內建支援。這可以使用以下語法來實現:
inserter = my_table.insert() inserter.execute(list_of_dictionaries)
參數化 ON DUPLICATE KEY UPDATE
在為其他物件產生的 SQL 語句中包含 ON DUPLICATE KEY UPDATEICATE KEY UPDATE子句資料庫,您可以使用裝飾器來附加所需的string:
@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)
主鍵的ORM 功能
對於唯一鍵為主鍵的ORM 對象,可以使用SQLAlchemy 的session.merge()函數複製重複密鑰更新功能:
session.merge(ModelObject)
非主鍵的自訂實作
對於非主鍵唯一約束,可以建立一個類似Django 的get_or_create( ) 的自訂函數來實現期望的行為:
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
以上是如何在 SQLAlchemy 中實作 INSERT ... ON DUPLICATE KEY UPDATE 功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!