mssql-python 드라이버의 각 릴리스는 새로운 기능, 성능 향상, 버그 수정을 도입합니다. 다음 섹션에서는 모든 버전을 자세히 설명합니다.
MSSQL-Python 1.11.0
출시일: 2026년 7월
Enhancements
개선된 컨텍스트 매니저 의미론
with connection: 이제 정상 종료 시 트랜잭션을 올바르게 커밋하고 예외 발생 시 롤백하여 더 파이썬답고 예측 가능해졌습니다.
import mssql_python
# On clean exit, transaction commits
with mssql_python.connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO MyTable (Name) VALUES ('Alice')")
# Automatically committed on exit
# On exception, transaction rolls back
try:
with mssql_python.connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO MyTable (Name) VALUES ('Bob')")
raise ValueError("Oops!")
except ValueError:
pass
# Changes rolled back on exit
버그 수정
- SSH 터널 및 인프로세스 포워더 설정에서 ODBC 종료 경로(
conn.close()및cursor.close())와None값 매개변수에 대한SQLDescribeParam의 GIL 교착 상태를 수정했습니다. - 임시 테이블 및 테이블 변수에서
BINARY및VARBINARYNULL 매개변수 문제를 수정했습니다. 자동 타입 확인이 실패하면 드라이버는 명시적인cursor.setinputsizes()안내가 포함된 Python 경고를 출력합니다. - Apple Silicon에서 클린 설치 시
import mssql_python가 실패하던 문제를 수정했습니다(1.8.0에서 발생한 회귀). 번들로 포함된 ODBC dylib 의존성은 이제 두 아키텍처 모두arm64x86_64에 맞게 다시 작성되었습니다. -
Authentication=ActiveDirectoryServicePrincipal로 인증할 때 대량 복사 작업이 멈추던 Rust 코어의 GIL 교착 상태를 수정했습니다.
MSSQL-Python 1.10.0
릴리스 날짜: 2026년 6월
Enhancements
ActiveDirectoryServicePrincipal 대량 복사 지원
cursor.bulkcopy() 현재 는 서비스 주체 자격 증명을 사용하여 대량 삽입을 허용하는 것을 지원합니다 Authentication=ActiveDirectoryServicePrincipal.
import mssql_python
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryServicePrincipal;"
"UID=<application-client-id>;"
"PWD=<client-secret>;"
"Encrypt=yes"
)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##SpDemo (ID INT, Value FLOAT)")
conn.commit()
result = cursor.bulkcopy("##SpDemo", [(1, 1.5), (2, 2.5)])
print(f"Copied {result['rows_copied']} rows")
버그 수정
- Arrow fetch 경로에 있는 비ASCII
VARCHAR와CHAR데이터를 고정했습니다. - 대량 부하 작업 중 고정된 연결 타임아웃.
MSSQL-파이썬 1.9.0
릴리스 날짜: 2026년 6월
Enhancements
대량 복사의 행 개체
cursor.bulkcopy() 이제 수동 튜플 변환을 요구하는 대신, 가져온 Row 객체를 직접 허용합니다.
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
# Fetch rows from source table
cursor.execute("SELECT ProductID, Name, ListPrice FROM Production.Product")
rows = cursor.fetchall()
# Pass fetched Row objects directly to bulkcopy
cursor.execute("CREATE TABLE ##RowBulkDemo (ProductID INT, Name NVARCHAR(50), ListPrice MONEY)")
conn.commit()
result = cursor.bulkcopy("##RowBulkDemo", rows)
print(f"Copied {result['rows_copied']} rows")
버그 수정
- 고정된 휠 패키징이라
simdutf항상 정적으로 연결되어 있습니다. -
executemany()의 대형DECIMAL인서트가 수정됨. - NULL 파라미터에 대한 잘못된 타입 폴백을 수정했습니다.
- 예외 피클링 및 언피클링의 왕복 과정에서 발생하던 문제를 수정했습니다.
- 결과 집합 전반에서
PRINT메시지를 유지하도록nextset()를 수정했습니다. -
executemany()실행 시 데이터 폴백 경로에서Row처리 문제를 수정했습니다. - 정적 분석 도구를 위한 fetch 메서드 타입 검사를 수정했습니다.
MSSQL-파이썬 1.8.0
릴리스 날짜: 2026년 5월
Enhancements
ActiveDirectoryMSI 대량 복사 지원
cursor.bulkcopy() 이제 시스템 할당 및 사용자 지정 관리 신원을 지원합니다 Authentication=ActiveDirectoryMSI .
import mssql_python
# System-assigned managed identity
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryMSI;"
"Encrypt=yes"
)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##MsiDemo (ID INT, Name NVARCHAR(50))")
conn.commit()
result = cursor.bulkcopy("##MsiDemo", [(1, "Alice"), (2, "Bob")])
print(f"Copied {result['rows_copied']} rows")
행 문자열 키 인덱싱
예를 들어 row["col"], 이제 열 이름으로 행 값에 접근할 수 있으며, 위치 인덱싱과 속성 접근도 가능합니다.
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
cursor.execute("SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = 1")
row = cursor.fetchone()
# Access by column name (new in 1.8.0)
print(row["ProductID"]) # Access by key
print(row["Name"])
# Still supports positional indexing
print(row[0]) # Positional access
# And attribute access
print(row.Name) # Attribute access
번들 제공된 ODBC 드라이버 업그레이드
번들로 제공된 Microsoft ODBC SQL Server 드라이버는 18.6.2.1로 업데이트되었습니다.
버그 수정
- 토큰 기반 인증에서 지연된 연결 속성의 수명 문제를 해결했습니다.
- 인증 경로에서 반복되는 연결 문자열 파싱을 수정했습니다.
- 시퀀스 입력의
executemany()타입 주석을 수정했습니다.
MSSQL-Python 1.7.1
릴리스 날짜: 2026년 5월
Enhancements
확대된 휠 커버리지와 성능 향상
이 릴리스는 RHEL 8 호환 휠을 추가하고, macOS Python 3.10 universal2 휠을 복원하며, simdutf을 통해 UTF-16 처리를 개선하고, execute() 핫 패스를 최적화했습니다.
성능 영향: 메서드의 execute() 핫 패스 최적화로 인해 배치 실행 처리량이 일반적인 워크로드에서 ~15% 향상됩니다.
버그 수정
- 로그인 실패 시
RuntimeError대신mssql_pythonDB-API 예외가 발생하도록 수정했습니다. - ODBC 실행, 페치, 트랜잭션, 연결 속성 호출 차단에 걸친 GIL 릴리스 확장.
-
executemany()소수점 값의 부호가 바뀔 때 발생하던 오류를 수정했습니다. - 플랫폼 간 불일치 CP1252
VARCHAR디코딩을 수정했습니다. -
NVARCHAR(MAX)및VARCHAR(MAX)열의 빈 문자열로 인한cursor.bulkcopy()실패를 수정했습니다.
비고
버전 1.7.0은 출판 문제로 인해 철회되었습니다. 버전 1.7.1 이상을 사용하세요.
MSSQL-Python 1.6.0
릴리스 날짜: 2026년 4월
Enhancements
파서 기반 연결 문자열 정제
이 개선은 비밀번호 필드와 브레이싱 값의 특수 문자를 올바르게 파싱할 수 있도록 보장합니다.
import mssql_python
# Complex passwords with special characters now parse correctly
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"UID=user@contoso;"
"PWD={p@ssw0rd;with{braces}};" # Braced values now handled correctly
"Encrypt=yes"
)
Connection string sanitization은 ODBC 연결 문자열 문법을 올바르게 처리하기 위해 정규 표현 기반 논리에서 파서 기반 처리로 이동했습니다.
버그 수정
- ODBC 연결 및 분리 작업 차단 시 고정된 GIL 해제.
-
SQL_DECIMAL및SQL_NUMERIC힌트 사용 시 발생하던setinputsizes()충돌을 수정했습니다. - ODBC 카탈로그 메서드에 대한 잘못된
fetchone()동작을 수정했습니다. - 사용 시
reset_cursor=False유효하지 않은 커서 상태 오류를 수정했습니다. - 매핑 기반 매개변수 시퀀스를 위한 고정
executemany()타입 힌트. -
setup_logging(log_file_path=...)에 대한 경로 순회 방지 기능을 추가했습니다.
MSSQL-파이썬 1.5.0
릴리스 날짜: 2026년 4월
새로운 기능
Apache Arrow 가져오기 지원
세 가지 새로운 커서 메서드가 Arrow C 데이터 인터페이스를 통해 고성능 컬럼 데이터 검색을 제공합니다:
-
cursor.arrow()은(는) 완전한pyarrow.Table을(를) 반환합니다. -
cursor.arrow_batch()단일pyarrow.RecordBatch를 반환합니다. -
cursor.arrow_reader()는 스트리밍용으로pyarrow.RecordBatchReader를 반환합니다.
이 구현은 성능 향상을 위해 핫 패스에서 Python 객체 생성을 우회합니다. 전체 문서는 Apache Arrow 통합을 참조하세요.
sql_variant 타입 지원
드라이버는 이제 가져올 때 sql_variant 열을 감지하고, 그 기저 기본 유형을 해석하여 원시 바이트 대신 올바른 형식의 Python 값을 반환합니다.
비고
sql_variant 컬럼은 스트리밍 페치 경로를 사용하는데, 고정형 컬럼에 비해 약간의 성능 저하가 있을 수 있습니다.
네이티브 UUID 지원
새로운 native_uuid 설정은 UNIQUEIDENTIFIER 열이 uuid.UUID 객체(기본값)로 반환될지, 아니면 pyodbc와 호환되는 대문자 문자열로 반환될지를 제어합니다. 모듈 단위 또는 연결별로 구성하세요:
# Module-level default
settings = mssql_python.get_settings()
settings.native_uuid = True # default
# Per-connection override
conn = mssql_python.connect(connection_string, native_uuid=False)
자세한 내용은 모듈 구성을 참조하세요.
로우 클래스 공공 수출
Row 클래스는 이제 타입 주석을 위해 최상위 수준으로 내보내집니다:
from mssql_python import Row
버그 수정
- 괄호로 묶인 식별자, 문자열 리터럴 및 주석 내부의
?오탐지를 수정했습니다. - 열에
VARBINARY대한 NULL 매개변수 바인딩을 고정했습니다(암묵적 변환 오류를 더 이상 발생시키지 않음). -
TIME(1)부터TIME(7)열까지의datetime.time값이 왕복 변환 시 마이크로초를 잃는 문제를 수정했습니다. -
TIME열에 대해 소수점 이하 초가 올바르게 포함되도록 Arrow 가져오기 경로를 수정했습니다. - Microsoft Entra ID 인증 방법으로 대량 사본을 고정했습니다(오래된 자격 증명 필드는 더 이상 검증 오류를 일으키지 않습니다).
- 인증 성능 향상을 위해 모듈 수준에서 캐시된 Azure Identity 자격 증명 인스턴스를 도입했습니다.
MSSQL-Python 1.4.0
출시일: 2025년 3월
새로운 기능
대량 복사 지원
고성능 대량 데이터 로딩은 이제 다음을 통해 cursor.bulkcopy()제공됩니다:
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##BulkDemo (ID INT, Name NVARCHAR(50), Price DECIMAL(10,2))")
conn.commit()
data = [
(1, "Item 1", 10.50),
(2, "Item 2", 20.75),
# ... potentially millions of rows
]
result = cursor.bulkcopy("##BulkDemo", data)
print(f"Copied {result['rows_copied']} rows")
이 방법은 , batch_size, timeoutcolumn_mappingskeep_identitycheck_constraintstable_lock, keep_nullsfire_triggers에 use_internal_transaction에 대한 선택지를 받아들입니다.
전체 문서는 대량 사본 을 참조하세요.
개선 사항
- 대규모 결과 세트에 대한 성능 최적화.
- 배치 작업 중 메모리 사용량을 줄였습니다.
- 대량 복사 실패에 대한 향상된 오류 메시지.
MSSQL-Python 1.3.0
출시일: 2025년 1월
새로운 기능
설정 클래스
새로운 Settings 클래스를 통해 모듈 전체 동작을 구성하세요:
import mssql_python
settings = mssql_python.get_settings()
settings.lowercase = True # Lowercase column names in cursor.description
자세한 내용은 모듈 구성을 참조하세요.
개선 사항
- Azure SQL 장애 조치 중 연결 타임아웃 처리가 더 좋아졌습니다.
- Python 3.13과의 호환성 향상.
MSSQL-Python 1.2.0
출시일: 2024년 11월
새로운 기능
스키마 발견 방법
데이터베이스 메타데이터 탐색을 위한 새로운 커서 방법:
cursor = conn.cursor()
# List all tables
cursor.tables(schema="dbo")
# Get column information
cursor.columns(table="Product", schema="Production")
# Get primary keys
cursor.primaryKeys(table="Product", schema="Production")
# Get foreign key relationships
cursor.foreignKeys(table="SalesOrderDetail", schema="Sales")
# Get stored procedures
cursor.procedures(schema="dbo")
# Get index statistics
cursor.statistics(table="Product", schema="Production")
# Get type information
cursor.getTypeInfo()
전체 문서는 스키마 발견 을 참조하세요.
개선 사항
- 반복 스키마 쿼리를 위한 향상된 메타데이터 캐싱.
- 결과의
columns()계산 열 처리가 개선되었습니다.
MSSQL-Python 1.1.0
출시일: 2024년 9월
새로운 기능
맞춤형 출력 변환기
가져오는 동안 열 값을 변환하는 사용자 지정 함수를 등록:
import mssql_python
from decimal import Decimal
conn = mssql_python.connect(connection_string)
# Convert decimals to float (converter receives Decimal)
def decimal_to_float(value):
if value is None:
return None
return float(value) # value is already a Decimal object
conn.add_output_converter(mssql_python.SQL_DECIMAL, decimal_to_float)
# Custom money formatting
def format_money(value):
if value is None:
return "$0.00"
return f"${float(value):,.2f}" # value is already a Decimal object
conn.add_output_converter(mssql_python.SQL_DECIMAL, format_money)
관리 방법:
add_output_converter(sql_type, converter_func)get_output_converter(sql_type)remove_output_converter(sql_type)clear_output_converters()
전체 문서는 Custom Type Converters를 참조하세요.
개선 사항
- 타입 변환 실패에 대한 더 나은 오류 메시지.
-
None를 반환하는 변환 함수 지원
MSSQL-Python 1.0.0
출시일: 2024년 7월
최초 GA 출시
Microsoft의 SQL Server용 네이티브 Python 드라이버인 mssql-python의 첫 번째 일반 출시 릴리스입니다.
핵심 기능
- DDBC 아키텍처: ODBC 드라이버 설치 없이 직접 데이터베이스 연결.
- DB-API 2.0 준수: 표준 Python 데이터베이스 인터페이스.
- 연결 풀링: 내장된 연결 풀 관리.
- Microsoft Entra 인증: Azure 신원 기반 인증에 대한 완전한 지원.
- TLS 암호화: 인증서 검증이 포함된 안전한 연결.
연결 기능
- 21개의 연결 문자열 키워드.
- 9가지 인증 모드(SQL, Windows, 7가지 Microsoft Entra ID 방식)를 지원합니다.
- 자동 커밋 제어.
- 실행 방법:
execute(),executemany(), 그리고batch_execute(). -
set_attr()및getinfo()을 통한 연결 속성. - 컨텍스트 매니저 지원.
커서 기능
- 표준 가져오기 방법:
fetchone(), ,fetchmany()fetchall(). - 확장 방법:
fetchval(),skip(). - 실행 방법:
execute()그리고executemany(). - 속성과 인덱스 접근 권한이 있는 행 객체들.
-
nextset()를 사용한 다중 결과 집합 탐색
데이터 형식 지원
- 모든 SQL Server 네이티브 타입입니다.
- Python↔SQL 타입 매핑.
- 명시적 타입 지정을 위한 SQL 타입 상수(예:
mssql_python.SQL_DECIMAL). - Python
None으로서 NULL 처리를 수행합니다.
트랜잭션 지원
- 수동 커밋과 롤백.
- 자동 커밋 모드.
- 격리 수준 제어.
- 교착 상태 감지 및 처리.
인증 모드
| Mode | 설명 |
|---|---|
| SQL Server 인증 | 사용자 이름 및 암호 |
| Windows 인증 | Trusted_Connection |
| ActiveDirectoryDefault | DefaultAzureCredential |
| ActiveDirectoryInteractive | 브라우저 기반 로그인 |
| 액티브디렉토리 디바이스코드 | 디바이스 코드 흐름 |
| ActiveDirectoryPassword | Microsoft Entra 사용자 이름과 비밀번호 (폐기됨; ROPC를 사용) |
| 액티브디렉터리MSI | 관리형 아이덴티티 |
| ActiveDirectoryServicePrincipal | 서비스 주체 |
| Active Directory 통합 | Windows Kerberos |
Upgrade
pyodbc에서
자세한 마이그레이션 가이드는 'pyodbc에서 마이그레이션'을 참조하세요.
주요 차이점:
- (qmark)와
?(pyformat) 매개변수 스타일 모두%(name)s지원됩니다. 기존?쿼리는 변경 없이 작동합니다. -
callproc()메서드가 없습니다. 대신EXECUTE문을 사용하세요. - 기본 제공 연결 풀링.
- 외부 ODBC 드라이버 의존성도 없습니다.
pymssql에서
자세한 마이그레이션 지침은 'Migrate from pymssql'을 참조하세요.
주요 차이점:
-
%s및%d매개변수 마커를?또는%(name)s로 바꿉니다. - 위치 인수 대신 연결 문자열을 사용하세요.
- FreeTDS 의존성은 없습니다.
- 연결마다 여러 커서가 동시에 존재합니다.
- 속성 접근이 가능한 행 객체가
as_dict=True를 대체합니다.
mssql-python 버전 간
드라이버를 업그레이드하면 새로운 기능과 수정이 추가됩니다.
pip install --upgrade mssql-python
운영 시스템을 업그레이드하기 전에 릴리스 노트에서 결정적인 변경 사항이 있는지 확인하세요.
로드맵
향후 기능과 개발 로드맵은 GitHub 저장소를 참조하세요.