SQLAlchemy 中的重复键更新
问题: 是否有一种简洁的方法来执行“INSERT ..使用 SQLAlchemy 的“ON DUPLICATE KEY UPDATE”操作ORM?
答案:
SQLAlchemy 在 1.2 版之后包含对 MySQL 的“ON DUPLICATE KEY UPDATE”的内置支持。要使用此功能,请参考此处提供的解决方案:https://stackoverflow.com/a/48373874/319066
SQL语句方法:
一般情况或者非 MySQL 数据库,您可以使用 @compiles 装饰器在生成的 SQL 语句中包含“ON DUPLICATE KEY UPDATE”。这里提供了一个例子:https://github.com/somada141/sqlalchemy-insert-duplicate-update
ORM方法:
SQLAlchemy的ORM不直接支持“关于重复密钥更新。”但是,对于主键更新,您可以使用 session.merge() 函数,该函数会检查现有记录并相应地更新它。
非主键的自定义实现:
对于涉及非主键更新的情况,您可以创建一个类似于 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中文网其他相关文章!