>데이터 베이스 >MySQL 튜토리얼 >SQLAlchemy에서 중복 키 업데이트 시 INSERT...를 효율적으로 수행하는 방법은 무엇입니까?

SQLAlchemy에서 중복 키 업데이트 시 INSERT...를 효율적으로 수행하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-25 15:14:111019검색

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

SQLAlchemy에서 ON DUPLICATE KEY UPDATE

질문: "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...를 효율적으로 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.