clickhousedb)이 포함되어 있습니다. 이 방언은 SQLAlchemy Core API를 대상으로 하며 SQLAlchemy 1.4.40+ 및 2.0.x를 지원합니다.
SQLAlchemy로 연결하기
clickhousedb:// 또는 clickhousedb+connect:// URL을 사용해 엔진을 생성합니다. 쿼리 매개변수는 ClickHouse 설정, 클라이언트 옵션, HTTP/TLS 전송 옵션에 대응됩니다.
- ClickHouse 설정: 쿼리 매개변수로 전달합니다(예:
use_skip_indexes=0). - 클라이언트 옵션:
compression(compress의 별칭),query_limit, 시간 초과 설정 등입니다. - HTTP/TLS 옵션: HTTP 풀과 TLS용 옵션입니다(예:
ch_http_max_field_name_size=99999,ca_cert=certifi).
핵심 쿼리
DISTINCT를 포함한 SQLAlchemy Core SELECT 쿼리를 지원합니다.
WHERE 절이 포함된 경량 DELETE를 지원합니다:
DDL 및 리플렉션
clickhousedb_default_type, clickhousedb_codec_expression, clickhousedb_ttl_expression와 같은 방언별 속성도 포함됩니다.
삽입 (Core 및 기본 ORM)
범위 및 제한 사항
- 핵심 범위:
JOIN(INNER,LEFT OUTER,FULL OUTER,CROSS)이 포함된SELECT,WHERE,ORDER BY,LIMIT/OFFSET,DISTINCT같은 SQLAlchemy Core 기능을 지원합니다. WHERE가 있는DELETE만 지원: 이 방언은 경량DELETE를 지원하지만, 실수로 테이블 전체가 삭제되는 것을 방지하려면 명시적인WHERE절이 필요합니다. 테이블을 비우려면TRUNCATE TABLE을 사용하십시오.UPDATE미지원: ClickHouse는 append에 최적화되어 있습니다. 이 방언은UPDATE를 구현하지 않습니다. 데이터를 변경해야 하는 경우 업스트림에서 변환을 적용한 후 다시 삽입하거나, 사용자 책임하에 명시적인 텍스트 SQL(예:ALTER TABLE ... UPDATE)을 사용하십시오.- DDL 및 리플렉션: 데이터베이스와 테이블 생성이 지원되며, 리플렉션은 컬럼 타입과 테이블 엔진 메타데이터를 반환합니다. ClickHouse는 이러한 제약 조건을 강제하지 않으므로 일반적인 PK/FK/인덱스 메타데이터는 제공되지 않습니다.
- ORM 범위: 편의를 위해 Declarative 모델과
Session.add(...)/bulk_save_objects(...)를 통한 삽입을 사용할 수 있습니다. 고급 ORM 기능(관계 관리, unit-of-work 업데이트, cascading, eager/lazy loading 시맨틱)은 지원되지 않습니다. - 프라이머리 키 의미:
Column(..., primary_key=True)는 SQLAlchemy에서 객체 아이덴티티 용도로만 사용됩니다. 이는 ClickHouse에 서버 측 제약 조건을 생성하지 않습니다.ORDER BY(및 선택적PRIMARY KEY)는 테이블 엔진(예:MergeTree(order_by=...))을 통해 정의하십시오. - 트랜잭션 및 서버 기능: 2단계 트랜잭션, 시퀀스,
RETURNING, 고급 격리 수준은 지원되지 않습니다.engine.begin()은 SQL 문을 묶는 Python 컨텍스트 매니저를 제공하지만, 실제 트랜잭션 제어는 수행하지 않습니다(commit/rollback은 no-op입니다).