이 문서에서는 Django 데이터베이스 백 엔드의 mssql-django 각 버전에서 새로운 기능, 개선 사항 및 변경 내용을 설명합니다.
버전 2.0
출시일: 2026년 9월
버전 2.0은 Microsoft의 mssql-python 드라이버를 pyodbc의 데이터베이스별 대안으로 추가하고, 지원되는 Python, Django 및 SQL Server 버전 조합을 상향 조정하며, 호환성 및 안정성 수정 사항을 포함합니다.
pyodbc 기본 드라이버로 남아 있습니다.
하이라이트
-
mssql-python 드라이버 지원: 데이터베이스 별칭은
"python_driver": "mssql_python"딕셔너리에서OPTIONS로 옵트인합니다. 드라이버는 연결, 연결 풀링, 재시도, 트랜잭션 및 저장점, datetimeoffset 값, 인트로스펙션, Microsoft Entra 인증을 지원합니다. 해당 옵션을 지정하지 않은 별칭은 계속pyodbc를 사용하므로, 옵트인하기 전까지는 아무것도 변경되지 않습니다. 자세한 내용은 mssql-django의 데이터베이스 드라이버 선택을 참조하세요. -
mssql-python 경로에서는 별도의 ODBC 드라이버 설치가 필요 없음:
mssql-python의 별칭에는 외부에 설치된 Microsoft SQL Server용 ODBC 드라이버가 필요하지 않습니다.pyodbc에 계속 남아 있는 별칭은 여전히 그대로 남아 있습니다. - 현대화된 지원 매트릭스: Python 3.10부터 3.14, Django 5.2부터 6.1, SQL Server 2017부터 2025까지. Django 6.0 및 그 이후 버전은 Python 3.12 이상이 필요합니다.
버그 수정
-
명시적 MARS 설정은 적용됩니다:
extra_params의MARS_Connection값이 명시적으로 지정된 경우 Windows 기본값으로 덮어쓰지 않고 그대로 유지되며, 일치 여부는 대소문자를 구분하지 않습니다. 설정MARS_Connection=no이제 Microsoft Fabric Warehouse를 포함해 MARS를 허용하지 않는 엔드포인트에서도 작동합니다. MARS가 비활성화되면 ORM 반복은 결과를 가져오기 전에 버퍼링하여 중첩 쿼리가 연결을 재사용할 수 있게 하여, 대규모 쿼리셋에서는 더 많은 메모리를 소비합니다. 이 연결 수정은 마이그레이션이나 다른 SQL Server 기능에 대한 완전한 Warehouse 지원을 추가하지 않습니다. -
대괄호 와일드카드는 식 조회에서 이스케이프 처리됩니다:
startswith및F()와 같이contains식으로 두 필드를 비교하는 패턴 조회는 SQL Server의[와일드카드를 이스케이프 처리합니다. 괄호 문자는 와일드카드 문법이 아닌 데이터로 매칭됩니다. -
인용구는 inspectdb 스키마 이름에서 이스케이프됩니다: 값의
inspectdb --schema단일 인용문은 메타데이터 쿼리에서 이스케이프되므로, 인용구가 포함된 스키마 이름은 더 이상 잘못된 형태의 Transact-SQL(T-SQL)를 생성하지 않습니다. -
비어 있는 HOST는 mssql-python 경로에서 localhost에 연결됩니다: Django가 빈 문자열로 채워 넣는 생략된
HOST는 빈localhost값으로 유효성 검사에 실패하는 대신SERVER=로 확인됩니다. 이 동작은 로컬 인스턴스의 기본 동작과 일치pyodbc합니다.
Improvements
-
pytz를 zoneinfo 및 tzdata로 대체: 시간대 처리는 표준 라이브러리
zoneinfo모듈을 사용하며, Windows 및 최소 컨테이너 이미지처럼 IANA 시간대 데이터베이스가 포함되지 않은 환경에서는tzdata패키지가 이를 제공합니다. 음의 일광절약 시간제 오프셋이 있는 구역의 경우 오프셋은 연중 정확히 유지됩니다.pytz더 이상 의존성이 아닙니다. -
최신 SQL Server 버전도 허용됩니다: 백엔드가 인식하지 못하는 SQL Server 주요 버전은 버전 검증에 실패하지 않고 백엔드가 알고 있는 최신 기능 세트를 사용합니다. 해당
mssql-django릴리스가 출시되기 전에도 새 SQL Server 릴리스에 연결할 수 있습니다. 연결을 수락한다고 해서 미검증 기능이 지원된다고 선언되는 것은 아닙니다.
파괴적 변경
- Python 3.8과 3.9, 그리고 Django 3.2부터 5.1까지는 더 이상 지원되지 않습니다. 이전 버전의 호환성 코드는 그대로 유지되지만, 그 조합들은 테스트되거나 목록에 공개되지 않습니다.
-
mssql-python1.15.0 이상은 별칭이pyodbc를 사용하는 경우에도 필수 의존성입니다. 설치는 호환mssql-python가능한 배포판을 가진 플랫폼으로 제한되며, ARM64의 SUSE Linux는 제외됩니다. 다른 플랫폼의 프로젝트는 버전 1.8.0을 유지합니다. - 선언된 SQL Server 지원은 SQL Server 2017부터 시작되며, 선언된 네이티브 연결 지원은 Microsoft ODBC Driver 17과 Microsoft ODBC Driver 18로 제한됩니다.
버전 1.8.0
출시일: 2026년 8월
버전 1.8.0은 Django 6.1 지원을 추가하면서 Django 3.2부터 6.0까지는 계속 지원합니다. Django 6.0에서 6.1로 프로젝트를 옮기는 데는 이 섹션에서 설명한 두 가지 Django 6.1 기능 중 하나를 사용하지 않는 한 코드 변경이 필요하지 않습니다.
하이라이트
-
Django 6.1 지원: Django 3.2부터 6.0까지 계속 지원하면서 Django 6.1에 대해 검증됨. 의존성 제약은
django>=3.2,<6.1에서django>=3.2,<6.2로 확대됩니다. -
Django 6.1에서 사용하는
quote_name쿼리 컴파일러: Django 6.1은quote_name_unless_alias더 이상 지원되지 않습니다. 백엔드는 이제 Django 6.1 및 이후 버전을 호출SQLCompiler.quote_name하며, 버전별로 제한되어 이전 Django 버전은 변경되지 않습니다. 슬라이스 및 오프셋 쿼리(예:qs[a:b]및OFFSET ... FETCH)는 지원 중단 경고 없이 컴파일됩니다. -
외래 키 정보 조회는 ON DELETE 규칙까지 반환합니다: Django 6.1에서는 DELETE가 데이터베이스 수준의 ON
get_relations()규칙을 포함하도록 확장되었습니다. 백엔드는 예상한 세 부분 구조를 반환하고 SQL ServerNO ACTION외래 키를 그에 따라 매핑하므로,inspectdb와 외래 키 인트로스펙션이 정확한 모델을 생성합니다.
지원되지 않는 Django 6.1 기능
이 백엔드에는 두 가지 Django 6.1 추가 기능이 서로 다른 이유로 제공되지 않습니다:
-
데이터베이스 수준의 참조 동작 (
DB_CASCADE,DB_SET_NULL,DB_SET_DEFAULT): SQL Server는 동일한 테이블에 여러 개의 캐스케이드 경로를 가진 외래키 그래프를 거부하므로(오류 1785), 따라서 SQL Server 버전에서는 이 기능에 대한 네이티브 경로가 없습니다. 이 값들 중 하나를 사용하면 Django 시스템 검사fields.E324가 올라가며, 표준 Django 수준on_delete으로 가리키게 됩니다. -
비트 단위 집계 함수 (
BitAnd,BitOr,BitXor): SQL Server에는 기본 제공 비트 단위 집계 함수가 없고 백엔드에서도 이를 에뮬레이션하지 않으므로, 이러한 집계 함수는NotSupportedError를 발생시킵니다.
자세한 내용은 mssql-django의 제한 사항 및 지원되지 않는 기능을 참조하세요.
버전 1.7.4
출시일: 2026년 7월
버전 1.7.4는 원시 쿼리 처리와 주석이 달린 GROUP BY 쿼리 처리에 대한 두 가지 수정이 포함된 하위 호환 패치 릴리스입니다.
버그 수정
-
IndexError이스케이프된GROUP BY및 실제 매개변수가 있는%%쿼리에서: 이전에는GROUP BY절이 있는 모든 쿼리가%\w+와 일치하는 플레이스홀더 재작성 단계를 거쳐 이를{}로 대체했습니다. 이 정규식은 이스케이프된%%리터럴과도 일치했는데, 이로 인해 유령 자리 표시자가 삽입되었고 쿼리가IndexError: Replacement index N out of range-이스케이프와 실제%%매개변수를 함께 사용하면 언제나%s를 발생시켰습니다. 이제 더 좁혀진 정규식은%%(그대로 보존됨)과%s(실제 자리 표시자)에만 영향을 미치며, 이것이 컴파일러가 항상 생성하는 유일한 패턴입니다. 같은 수정은 또한 매개변수가 없는 쿼리에서LIKE '%abc%'와 같은 이스케이프되지 않은 패턴이LIKE '{}%'로 재작성되어 잘못된 행이 반환되던 별개의 무증상 버그도 방지합니다. - raw
NotImplementedError쿼리에서IntegerChoices에 대한GROUP BY: 이전에는IntegerChoices절이 포함된 rawNotImplementedError쿼리에NotImplementedError: Not supported type <enum ...>값을 전달하면 가 발생했습니다. 매개변수 타입 도우미는 정확한 타입 검사(typ == int)를 사용했으며,type(IntegerChoices_value)는int가 아니라 enum 클래스였기 때문에int의 서브클래스인데도 그 값은 예외 발생 처리로 넘어갔습니다. 이제 타입 검사에isinstance를 사용하며,bool분기보다int분기가 먼저 평가됩니다(bool자체가int의 하위 클래스이기 때문입니다). Enum 선택 항목은 이제 올바르게 바인딩되고,bool는 여전히BIT에 바인딩되며, 일반int는 변경되지 않습니다.
버전 1.7.3
릴리스 날짜: 2026년 6월
버전 1.7.3은 두 개의 연결 및 런타임 수정이 포함된 이전 버전과 호환되는 패치 릴리스입니다.
버그 수정
-
FA001이외의Authentication=모드에 대한ActiveDirectoryMsi: 이전에는 백엔드가Trusted_Connection=yes에 대해서만ActiveDirectoryMsi를 건너뛰었습니다.USER값을 제공하지 않는 다른 Entra 모드(예:ActiveDirectoryIntegrated,ActiveDirectoryDefault,ActiveDirectoryDeviceFlow)도 여전히Trusted_Connection=yes를 받았으며, ODBC 드라이버는 이를FA001(Cannot use Authentication option with Integrated Security option)와 함께 거부했습니다. 이 수정은 경계를 인식하고 대/소문자를 구분하지 않는 방식으로 명시적Authentication=값을 감지하며,Trusted_Connection와Integrated Security=SSPI는 모두 건너뜁니다. 비밀번호 처리는 변경되지 않았습니다:SqlPassword,ActiveDirectoryPassword, 및ActiveDirectoryServicePrincipal는 계속PWD를 전송하는 반면,ActiveDirectoryInteractive는 계속 이를 제외합니다. -
KeyError하위 클래스로 만든DatabaseWrapper에서: 캐시된sql_server_version및to_azure_sql_db속성은type(self).__dict__에 대한cached_property인트로스펙션에 의존했으며, 이로 인해KeyError의 서브클래스가 해당 속성들에 처음 접근할 때DatabaseWrapper가 발생했습니다(1.7.1에서 도입된 회귀). 이 수정에서는_known_versions를 통해 액세스되는 명시적인 클래스 수준 딕셔너리(_known_azures,self.)를 사용하므로, 조회가 MRO를 통해 해결되고 서브클래싱된 래퍼가 올바르게 동작합니다.
버전 1.7.2
릴리스 날짜: 2026년 5월
버전 1.7.2는 표준 시간대 및 호환성 수정이 포함된 이전 버전과 호환되는 패치 릴리스입니다.
버그 수정
-
.explain()Django 4.0 이상에 대한 호환성: Django 4.0 이상에서 더 이상 실패.explain()하지 않도록AttributeErrorDjango 설명 메타데이터의 컴파일러 처리를 수정했습니다. 이제 백엔드는 버전에 맞는 explain 필드를 따르며, 필요할 때는NotSupportedError를 올바르게 발생시킵니다. - datetimeoffset 표준 시간대 처리: 표준 시간대 오프셋이 삭제되지 않고 유지되도록 datetimeoffset 구문 분석이 수정되었습니다. 이제 반환되는 날짜/시간 값은 필요한 경우 시간대 정보가 포함된 상태로 제공됩니다.
-
Now()withUSE_TZ=True: 시간대 지원이 활성화된 경우 시간대 인식 동작을 사용하도록Now()에 대한 SQL 생성을 업데이트하여 UTC가 아닌 SQL Server 호스트에서 타임스탬프 드리프트를 방지합니다.
버전 1.7.1
릴리스 날짜: 2026년 4월
버전 1.7.1은 버그 수정이 포함된 이전 버전과 호환되는 패치 릴리스입니다.
버그 수정
-
FieldDoesNotExist인덱스 순서가 내림차순일 때 필드를 변경하는 경우: 인덱스 필드 이름을 해결할 때_alter_field()대신schema.py를 사용하도록index.fields_orders의index.fields를 수정했습니다. 이전 코드는 정렬 정보가 포함된 원시 필드 문자열(예:"-pub_date")을model._meta.get_field()에 전달했으며, 이로 인해FieldDoesNotExist가 발생했습니다. 이제 필드 이름만 추출되고 순서 지정 접미사가 제대로 삭제됩니다. -
Microsoft Fabric 지원의 SQL 데이터베이스(EngineEdition 12): Fabric(
EngineEdition=12)에서 Azure 버전으로 인식된 SQL 데이터베이스입니다. 이전에는 Fabric의 엔진 에디션을 인식하지 못해to_azure_sql_db가False을 반환하고 기능 게이트 확인이 실패했습니다. 수정 사항은EDITION_AZURE_SQL_FABRIC=12에_AZURE_EDITIONS를 추가하고 Fabric을 최신 지원 SQL Server 버전에 매핑합니다.JSONField, 해시 함수, 데이터 정렬 정보 조회 및 테스트 데이터베이스 정리는 이제 Fabric에서 올바르게 작동합니다.
버전 1.7
릴리스 날짜: 2026년 3월
하이라이트
- Django 6.0 지원: Django 6.0과의 완전한 호환성( Python 3.12 이상이 필요합니다. 모든 6.0 API 변경 내용은 백 엔드에서 투명하게 처리됩니다.
-
부분
CompositePrimaryKey지원: 백 엔드는 Django 5.2CompositePrimaryKey에 대한 부분 지원을 추가합니다. 하위 쿼리에 대한 튜플 비교에는 Django 5.2.4 이상이 필요하며 일부 복합 키 및JSONField에지 사례는 남아 있습니다. Django 5.2 자체는 mssql-django 1.6에서 처음 지원되었습니다. - SQL Server 2025 지원: SQL Server 2025에 대해 유효성이 검사되었습니다.
- ODBC 드라이버 18 기본값: 이제 백 엔드는 SQL Server ODBC Driver 18로 기본 설정되며 버전 18이 설치되지 않은 경우 ODBC Driver 17로 자동 대체됩니다.
버전별 참고 사항
| Django 버전 | Notes |
|---|---|
| 장고 5.1 |
inspectdb 는 복합 기본 키가 있는 테이블을 검사할 수 있지만 전체 모델 정의를 생성하지는 않습니다. |
| Django 5.2 |
CompositePrimaryKey 지원은 부분적입니다. 하위 쿼리에 대한 튜플 비교에는 Django 5.2.4 이상이 필요하며 일부 마이그레이션과 JSONField 에지 케이스는 남아 있습니다. |
| 장고 6.0 | Python 3.12 이상이 필요합니다. 모든 5.2 제한 사항이 적용됩니다. |
버전 1.6
릴리스 날짜: 2025년 8월
- Django 5.1 및 5.2 지원이 추가되었습니다.
- 향상된 JSON 기능 및 이전 버전과의 호환성
- 파이프라인 인프라가 개선되었습니다.
버전 1.5
릴리스 날짜: 2024년 4월
-
supports_comments용db_comments기능 플래그가 추가되었습니다. - 매개 변수 형식 지정 및 스키마 쿼리에 대한
AutoField버그 수정
버전 1.4
릴리스 날짜: 2024년 1월
- Django 5.0 지원이 추가되었습니다.
-
db_comment지원이 추가되었습니다. - 날짜/시간 변환 및 빈 집계에 대한 버그 수정
버전 1.3
릴리스 날짜: 2023년 5월
- Django 4.2 지원이 추가되었습니다.
- 대/소문자를 구분
Replace하는 함수 지원이 추가되었습니다. -
OFFSET처리 및 왼쪽 패딩 관련 버그 수정
버전 1.2
릴리스 날짜: 2022년 12월
- Django 4.1 지원이 추가되었습니다.
- 표준 시간대 지원(datetimeoffset 포함
USE_TZ=True)이 추가되었습니다. - 대량 삽입 ID 검색에 대한 옵션이 추가
return_rows_bulk_insert되었습니다. - SQL Server 2022 지원이 추가되었습니다.
- Azure SQL Managed Instance 대한 지원이 추가되었습니다
JSONField.
버전 1.1
릴리스 날짜: 2022년 7월
- Django 3.2 및 4.0 지원.
- SQL Server 2016 이상 및 Azure SQL Database 지원.
-
pyodbc기반 연결.