Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Каждый релиз драйвера mssql-python вводит новые функции, улучшения производительности и исправления ошибок. Следующие разделы подробно описывают каждую версию.
MSSQL-Python 1.11.0
Дата выхода: июль 2026
Усовершенствования
Улучшенная семантика менеджера контекста
with connection: теперь корректно фиксирует транзакции при корректном завершении и откатывает их при возникновении исключения, что делает его поведение более соответствующим духу Python и более предсказуемым.
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
Исправления ошибок
- Исправлена взаимная блокировка GIL в коде завершения работы ODBC (
conn.close()иcursor.close()), а также вSQLDescribeParamдля параметров со значениемNoneв конфигурациях SSH-туннеля и внутрипроцессного форвардера. - Фиксированные
BINARYиVARBINARYNULL параметры в временных таблицах и таблицах переменных. Когда автоматическое разрешение типов не работает, драйвер издаёт предупреждение на Python с явнымиcursor.setinputsizes()указаниями. - Исправлен
import mssql_pythonсбой на Apple Silicon при чистой установке (регрессия в версии 1.8.0). Входящие в комплект зависимости библиотеки ODBC dylib теперь переписаны для архитектурarm64иx86_64. - Исправлена взаимная блокировка GIL в ядре Rust, которая приводила к зависанию операций массового копирования при аутентификации с помощью
Authentication=ActiveDirectoryServicePrincipal.
MSSQL-Python 1.10.0
Дата выпуска: июнь 2026 г.
Усовершенствования
Поддержка массового копирования для 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")
Исправления ошибок
- Исправлены данные с не-ASCII-символами
VARCHARиCHARв пути извлечения Arrow. - Фиксированные тайм-ауты соединения во время операций с массовой загрузкой.
MSSQL-Python 1.9.0
Дата выпуска: июнь 2026 г.
Усовершенствования
Объекты строк при массовом копировании
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всегда связана статически. - Исправлены крупные
DECIMALвставки вexecutemany(). - Исправлен неправильный тип резерва для параметров NULL.
- Фиксированное исключение — туда-обратно огурцы и нерассоленные рейсы.
- Исправлено:
nextset()это сохраняетPRINTсообщения между наборами результатов. - Исправлена
Rowобработка вexecutemany()резервном пути данных при выполнении. - Исправлена проверка типов метода fetch для инструментов статического анализа.
MSSQL-Python 1.8.0
Дата выпуска: май 2026 г.
Усовершенствования
Поддержка 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 г.
Усовершенствования
Расширенное покрытие колёс и улучшение производительности
В этом релизе добавлены wheel-пакеты, совместимые с RHEL 8, восстановлены wheel-пакеты для macOS и Python 3.10 universal2, улучшена обработка UTF-16 с помощью simdutf, а также оптимизирован критический участок кода execute().
Влияние на производительность: пропускная способность пакетного выполнения улучшается на ~15% по сравнению с типичными нагрузками благодаря оптимизации горячих путей в execute() методе.
Исправления ошибок
- Исправлены сбои при входе, из-за которых теперь вызываются исключения DB-API
mssql_pythonвместоRuntimeError. - Расширенный релиз GIL блокирует выполнение, извлечение, транзакции и вызовы атрибутов соединения ODBC.
- Исправлены
executemany()ошибки при изменении знака десятичных значений. - Исправлено несогласованное декодирование CP1252
VARCHARна разных платформах. - Исправлены
cursor.bulkcopy()сбои при пустых строках в столбцахNVARCHAR(MAX)иVARCHAR(MAX).
Замечание
Версия 1.7.0 была отозвана из-за проблем с публикацией. Используйте версию 1.7.1 или более позднюю.
MSSQL-Python 1.6.0
Дата выпуска: апрель 2026 г.
Усовершенствования
Очистка строки подключения на основе парсера
Это улучшение обеспечивает правильный разбор специальных символов в полях пароля и значениях в фигурных скобках.
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"
)
Очистка строки подключения была переведена с логики на основе регулярных выражений на обработку с использованием парсера для корректной работы с синтаксисом строки подключения ODBC.
Исправления ошибок
- Исправлено освобождение GIL во время блокировки операций подключения и отключения ODBC.
- Исправлены
setinputsizes()вылеты, связанные с подсказкамиSQL_DECIMALиSQL_NUMERIC. - Исправлено некорректное
fetchone()поведение методов каталога ODBC. - Исправлены ошибки недопустимого состояния курсора при использовании
reset_cursor=False. - Фиксированные
executemany()типовые подсказки для последовательностей параметров на основе отображения. - Добавлена защита для прохождения пути для
setup_logging(log_file_path=...).
MSSQL-Python 1.5.0
Дата выпуска: апрель 2026 г.
Новые возможности
Поддержка получения данных 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 для публичного экспорта
Класс Row теперь экспортируется на верхнем уровне для аннотаций типов:
from mssql_python import Row
Исправления ошибок
- Исправлено ложное обнаружение
?внутри идентификаторов в скобках, строковых литералов и комментариев. - Исправлено привязывание параметров NULL для
VARBINARYстолбцов (больше не вызывает неявных ошибок преобразования). - Исправлена проблема потери микросекунд в значениях
datetime.timeпри преобразовании туда и обратно в столбцах сTIME(1)поTIME(7). - Исправлен путь выборки Arrow, чтобы он корректно включал доли секунды для столбцов
TIME. - Исправлено массовое копирование с помощью методов аутентификации Microsoft Entra ID (устаревшие поля учетных данных больше не вызывают ошибок валидации).
- Кэшированные экземпляры учетных данных Azure Identity на уровне модуля для улучшения производительности аутентификации.
MSSQL-Python 1.4.0
Дата выхода: март 2025
Новые возможности
Поддержка массового копирования
Высокопроизводительная массовая загрузка данных теперь доступна через 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, timeout, column_mappings, keep_identity, check_constraintstable_lockkeep_nullsfire_triggersи .use_internal_transaction
Подробную документацию см. в разделе «Массовое копирование».
Improvements
- Оптимизации производительности для больших наборов результатов.
- Снижение использования памяти во время пакетных операций.
- Улучшенные сообщения об ошибках при сбоях массового копирования.
MSSQL-Python 1.3.0
Дата выхода: январь 2025
Новые возможности
Класс настроек
Настройте поведение на уровне всего модуля через новый Settings класс:
import mssql_python
settings = mssql_python.get_settings()
settings.lowercase = True # Lowercase column names in cursor.description
См. конфигурацию модуля для подробностей.
Improvements
- Улучшена обработка тайм-аута подключения во время аварийного переключения Azure SQL.
- Улучшена совместимость с Python 3.13.
MSSQL-Python 1.2.0
Дата выхода: ноябрь 2024
Новые возможности
Методы обнаружения схем
Новые курсорные методы для исследования метаданных базы данных:
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()
См. раздел «Обнаружение схемы » для полной документации.
Improvements
- Улучшенное кэширование метаданных для повторяющихся запросов схемы.
- Более эффективная обработка вычисленных столбцов в
columns()результатах.
MSSQL-Python 1.1.0
Дата выхода: сентябрь 2024
Новые возможности
Пользовательские выходные преобразователи
Регистрируйте пользовательские функции для преобразования значений столбцов во время выборки:
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()
Полную документацию см. в разделе «Пользовательские преобразователи типов».
Improvements
- Улучшенные сообщения об ошибках при ошибках преобразования типов.
- Поддержка преобразовательных функций, возвращающих
None.
MSSQL-Python 1.0.0
Дата выхода: июль 2024
Первый общедоступный релиз
Первый общий выпуск mssql-python — нативного драйвера Python от Microsoft для SQL Server.
Основные возможности
- Архитектура 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). - Обработка NULL в формате Python
None.
Поддержка транзакций
- Ручное закрепление и откат.
- Режим автокоммитирования.
- Контроль уровня изоляции.
- Обнаружение и обработка тупиков.
Режимы проверки подлинности
| Mode | Описание |
|---|---|
| Проверка подлинности SQL Server | Имя пользователя и пароль |
| Аутентификация Windows | Trusted_Connection |
| ActiveDirectoryDefault | DefaultAzureCredential |
| ActiveDirectoryInteractive | Вход через браузер |
| ActiveDirectoryDeviceCode | Процесс ввода кода устройства |
| ActiveDirectoryPassword | Имя пользователя и пароль Microsoft Entra (устарело; использует ROPC) |
| ActiveDirectoryMSI | Манажируемая идентичность |
| ActiveDirectoryServicePrincipal | Сервис-принципал |
| Интегрировано с Active Directory | Windows Kerberos |
Upgrade
Из pyodbc
Подробные инструкции по миграции см. в разделе Переход с pyodbc.
Основные различия:
- Поддерживаются оба стиля параметров:
?(qmark) и%(name)s(pyformat). Ваши существующие?запросы работают без изменений. - Метод
callproc()отсутствует. Используйте инструкцииEXECUTEвместо этого. - Встроенный пул соединений.
- Нет внешних зависимостей от драйвера ODBC.
Из pymssql
Для подробного руководства по миграции см. раздел Migrate from pymssql.
Основные различия:
- Замените
%sи%dмаркеры параметров на?или%(name)s. - Используйте строка подключения вместо позиционных аргументов.
- Нет зависимости от FreeTDS.
- Несколько одновременных курсоров для одного соединения.
- Объекты строк с доступом к атрибутам заменяют
as_dict=True.
Между версиями mssql-python
Обновите драйвер, чтобы получить новые функции и исправления.
pip install --upgrade mssql-python
Перед обновлением производственных систем проверьте заметки к релизу на наличие неисправных изменений.
Roadmap
Для будущих функций и дорожной карты разработки смотрите репозиторий GitHub.