집 >데이터 베이스 >MySQL 튜토리얼 >SQLAlchemy를 사용하여 중복 키 업데이트 시 INSERT ...를 효율적으로 사용하려면 어떻게 해야 합니까?
SQLAlchemy를 사용한 우아한 ON 중복 키 업데이트
질문: INSERT를 실행하는 원활한 방법이 있습니까? 다음과 유사한 구문을 사용하여 SQLAlchemy에서 ON DUPLICATE KEY UPDATE inserter.insert().execute(list_of_dictionaries)?
정답:
MySQL용 내장 기능(버전 1.2 기준)
특히 MySQL의 경우 SQLAlchemy에는 이제 ON에 대한 지원이 포함됩니다. DUPLICATE KEY UPDATE.
SQL 문의 ON DUPLICATE KEY UPDATE
생성된 SQL에 ON DUPLICATE KEY UPDATE를 명시적으로 포함하려면 @compiles 데코레이터를 사용할 수 있습니다.
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
생성된 삽입물에 필요한 문자열을 추가할 수 있습니다. 명령문:
my_connection.execute(my_table.insert(append_string='ON DUPLICATE KEY UPDATE foo=foo'), my_values)
ORM의 ON DUPLICATE KEY UPDATE 기능
SQLAlchemy에는 ON DUPLICATE KEY UPDATE 또는 MERGE에 대한 명시적인 ORM 지원이 없지만 세션이 있습니다. .merge() 함수. 그러나 이 기능은 기본 키에만 유효합니다.
기본 키가 아닌 키에 대해 ON DUPLICATE KEY UPDATE 기능을 시뮬레이션하려면 다음과 같은 기능을 구현할 수 있습니다.
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
위 내용은 SQLAlchemy를 사용하여 중복 키 업데이트 시 INSERT ...를 효율적으로 사용하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!