首页 > 数据库 > mysql教程 > 如何在 SQLAlchemy 中高效地执行 INSERT ... ON DUPLICATE KEY UPDATE?

如何在 SQLAlchemy 中高效地执行 INSERT ... ON DUPLICATE KEY UPDATE?

Barbara Streisand
发布: 2024-11-25 15:14:11
原创
1058 人浏览过

How to Efficiently Perform INSERT ... ON DUPLICATE KEY UPDATE in SQLAlchemy?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板