Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье перечисляется, что менялось в каждом выпуске драйвера mssql-python, сначала новейшего. Каждый раздел охватывает новые функции, изменения поведения и исправления ошибок для одной версии.
Для версий, которые Microsoft поддерживает в настоящее время, см. раздел «Жизненный цикл поддержки».
MSSQL-Python 1.14.0
Дата выхода: август 2026
Усовершенствования
Обнаружение параметров и выполнение привязки в родном коде
Обнаружение и привязка типов параметров теперь выполняются в одном нативном конвейере вместо вызовов Python по параметрам. Это изменение устраняет существенное узкое место, ограничивавшее производительность, что повышает сквозную пропускную способность, особенно при более крупных операциях, таких как массовые вставки. Изменение приложения не требуется.
Исправления ошибок
Аргумент timeout для connect() задавал тайм-аут запроса вместо тайм-аута аутентификации
Теперь аргумент timeout задаёт SQL_ATTR_LOGIN_TIMEOUT и ограничивает попытку аутентификации, что и описывается в названии аргумента и документации. В более ранних версиях это превратилось в тайм-аут запроса для каждого SQL-выражения, поэтому connect(timeout=30) не ограничивал продолжительность попытки подключения, а выполнение запросов прерывалось через 30 секунд. Тайм-аут запроса для каждого утверждения остаётся доступным как свойства Connection.timeout .
Это важно
Если вы передавали timeout в connect() для прерывания долго выполняющихся запросов, теперь это больше не происходит. Вместо этого установите Connection.timeout. То же самое относится к случаю, когда вы полагались на connect(timeout=), чтобы увеличить тайм-аут подключения, который bulkcopy() использует для своего внутреннего соединения: установите Connection.timeout перед созданием курсора.
Для получения дополнительной информации см . раздел «Тайм-аут соединения».
bulkcopy() отклонён timeout=0
Значение timeout, равное 0, вызывало ошибку валидации, хотя 0 означает отсутствие тайм-аута в базовом API массового копирования. Теперь метод принимает 0 и отключает тайм-аут операции. Отрицательные, нецелочисленные и булевые значения всё ещё отвергаются.
Для получения дополнительной информации см. Массовое копирование.
Во время очистки было заменено исходное исключение при получении данных Arrow
Когда получение данных из считывателя Arrow завершалось с ошибкой, в процессе очистки драйвера возникала вторая ошибка, которая заменяла исходную, поэтому вызывающий код видел сбой очистки, а не причину сбоя при получении данных. Очистка теперь сначала проверяет состояние курсора и сохраняет исходное исключение.
executemany() Ошибки десятичного преобразования, включая значения параметров
Сбой при преобразовании executemany() в приводил к передаче проблемного значения через цепочку исключений, из-за чего данные клиента могли попасть в журналы приложений и системы мониторинга. Ошибка теперь показывает только индекс строк, индекс столбцов и тип значения.
Дополнительные сведения см. в разделе об обработке ошибок.
Типы Arrow View, для которых отклонено массовое копирование
bulkcopy_arrow() не мог обрабатывать массивы Arrow View переменной длины, поэтому столбцы Polars string_view приходилось сначала преобразовывать с помощью DataFrame.to_arrow(). Значения String View и NULL теперь проходят напрямую через интерфейс данных Arrow C.
Дополнительные сведения см. в разделе Интеграция Polars.
Загрузка расширений Windows использовала архитектуру хост-процессора
В Windows драйвер выбирал своё собственное расширение на основе процессора хоста, а не запускающегося интерпретатора, поэтому x64 Python на ARM64 загружался через резервный путь и писал уведомления в stdout. Загрузчик теперь выводит архитектуру из интерпретатора и сообщает о резервных случаях в виде предупреждений.
MSSQL-Python 1.13.0
Дата выхода: август 2026
Усовершенствования
Бинарные коды драйверов ODBC поставляются только в mssql-python-odbc
Версия 1.13.0 убирает libs/ запасной вариант с mssql-python колеса и объявляет mssql-python-odbc==18.6.2.1 в install_requires. Команда pip install mssql-python всё ещё создаёт рабочий драйвер. Явно установите mssql-python-odbc при установке с помощью --no-deps или из приватного индекса, который не содержит его зеркальную копию.
Дополнительные сведения см. в разделе "Установка".
Массовое копирование из источников Apache Arrow
Новый cursor.bulkcopy_arrow() метод загружает данные, которые уже находятся в формате Apache Arrow, не преобразуя каждую строку в объекты Python заранее. Передача источника Arrow в bulkcopy() теперь вызывает TypeError.
Дополнительные сведения см. в разделах интеграция Apache Arrow и массовое копирование.
token_providerпараметр для учетных данных Microsoft Entra
Функция connect() и класс Connection принимают аргумент token_provider, поэтому вы можете передать объект учетных данных, например DefaultAzureCredential, вместо указания режима аутентификации в строке подключения. Аргумент взаимоисключает ключевое Authentication слово и токены, проходящие через attrs_before, и поддерживает только коммерческую облачную область Azure.
Дополнительные сведения см. в разделе проверки подлинности Microsoft Entra.
Пулинг соединений с учётом идентичности
Пул подключений теперь разделяет подключения в зависимости от идентификатора Microsoft Entra. В ранних версиях пул использовал в качестве ключа только строку подключения, поэтому он мог выдать для запроса одного пользователя соединение, аутентифицированное как другой пользователь. Драйвер также получает токен только тогда, когда для запроса на соединение не находится подключение в пуле, и обновляет соединение из пула, когда до истечения срока действия токена остаётся менее 5 минут.
Для получения дополнительной информации см. раздел Пулирование соединений.
Исправления ошибок
executemany() вставлял нулевое количество строк, если после первой строки появлялись значения NULL
Вызов executemany() , который смешивал числовые значения, не относящиеся к NULL и NULL, вставлял нулевые строки и не вызывал исключений, когда после первой строки появлялся первый NULL. Это поведение затрагивало параметры tinyint, smallint, int и float. Драйвер теперь инициализирует индикаторы ODBC для каждого числового параметра фиксированной ширины перед выполнением массива.
Преобразователь SQL_WVARCHAR выходных данных преобразовал нестроковые столбцы
Регистрация конвертера строк также преобразовывала значения int, decimal и date, потому что драйвер использовал конвертер SQL_WVARCHAR как резервный для каждого столбца без собственного конвертера. Драйвер теперь использует этот запасной вариант только тогда, когда отображаемый в столбце тип Python — str или bytes.
Конвертеры вывода, зарегистрированные с помощью целочисленного SQL-кода, так и не запускались
Конвертеры, зарегистрированные с целочисленным кодом типа SQL, например SQL_DECIMAL, сохранялись, но никогда не вызывались, поскольку драйвер выполнял диспетчеризацию только по типу Python в cursor.description. Драйвер теперь отправляет сначала целочисленный код, затем тип Python, а затем запасной SQL_WVARCHAR вариант.
Это важно
Если вы регистрировали конвертеры по целочисленному коду SQL в более ранней версии, эти конвертеры начинают работать при обновлении. Проверьте их перед развертыванием, потому что значения столбцов, которые ранее проходили без изменений, теперь преобразованы.
Для получения дополнительной информации см. раздел «Пользовательские конвертеры типов».
Закрытие считывателя Arrow не освобождало курсор на стороне сервера
Закрытие средства чтения Arrow оставляло серверный курсор выделенным, а родительский объект Cursor — в неконсистентном состоянии, поскольку cursor.arrow_reader() возвращал необработанный pyarrow.RecordBatchReader. Теперь метод возвращает обёртку, метод close() которой освобождает серверный курсор и сбрасывает состояние курсора, при этом сама обёртка может использоваться как менеджер контекста.
Для получения дополнительной информации см. раздел интеграция Apache Arrow.
Частично инициализированный курсор вызвал AttributeError в Cursor.__del__
Курсор, инициализатор которого не сработал, вызывал an AttributeError как неподлежащее исключение при сборе мусора.
Cursor.__init__ вызвал исключение до того, как установил атрибуты closed и hstmt, которые __del__ затем попытался прочитать. Инициализатор теперь задаёт оба атрибута перед любым кодом, который может вызваться, и __del__ защищает свой лог-вызов, чтобы оставаться в безопасности при выключении интерпреттера.
MSSQL-Python 1.12.0
Дата выхода: июль 2026
Усовершенствования
Отдельный mssql-python-odbc сопутствующий пакет
Бинарные коды драйверов ODBC теперь публикуются отдельно как mssql-python-odbc — дополнительный пакет, ориентированный только на данные, закреплённый на версии 18.6.2. Вам не нужно менять код, потому что pip install mssql-python с ним устанавливается дополнительный пакет. Нативный загрузчик предпочитает сопутствующий пакет и, если он отсутствует, использует в качестве запасного варианта бинарные файлы, входящие в состав колеса mssql-python.
Дополнительные сведения см. в разделе "Установка".
Исправления ошибок
cursor.bulkcopy() теперь используется тайм-аут соединения родительского соединения
bulkcopy() теперь использует тайм-аут подключения родительского соединения, который вы задаёте с помощью connect(..., timeout=<seconds>). Ранее отдельное соединение, которое открывалось при массовом копировании, использовало жёстко закодированный 15-секундный тайм-аут, который нельзя было переопределить из Python. Родительское соединение, созданное с помощью timeout=0, по-прежнему использует значение по умолчанию — 15 секунд.
Для получения дополнительной информации см. Массовое копирование.
cursor.bulkcopy() поддерживает пользовательские столбцы типов CLR
cursor.bulkcopy() ранее завершался с ошибкой при Protocol Error: Unsupported TDS type for bulk copy: 0xF0 для любого целевого столбца, использовавшего определяемый пользователем тип общеязыковой среды выполнения (CLR), включая встроенные типы geography, geometry и hierarchyid. Теперь драйвер сопоставляет столбцы CLR UDT с varbinary(max) при передаче и потоково передаёт предоставленные вами байты как полезную нагрузку IBinarySerialize UDT. Исправление выходит в mssql_py_core версии 0.1.7.
Для получения дополнительной информации см. Массовое копирование и отображения типов данных.
MSSQL-Python 1.11.0
Дата выхода: июль 2026
Усовершенствования
Улучшенная семантика менеджера контекста
with connection: теперь фиксирует транзакцию при нормальном завершении блока и откатывает её, если блок завершается из-за исключения.
Дополнительные сведения см. в разделе "Управление транзакциями".
Исправления ошибок
- Исправлена взаимная блокировка 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, так что можно массово вставлять с учётными данными главного сервиса.
Для получения дополнительной информации см. разделы «Массовое копирование» и аутентификация Microsoft Entra.
Исправления ошибок
- Исправлены данные с не-ASCII-символами
VARCHARиCHARв пути извлечения Arrow. - Фиксированные тайм-ауты соединения во время операций с массовой загрузкой.
MSSQL-Python 1.9.0
Дата выпуска: июнь 2026 г.
Усовершенствования
Объекты строк при массовом копировании
cursor.bulkcopy() теперь принимает полученные Row объекты напрямую, вместо необходимости ручного преобразования кортежа.
Дополнительные сведения см. в разделах Массовое копирование и Объекты строк.
Исправления ошибок
- Упаковка с фиксированным колесом, поэтому
simdutfвсегда связана статически. - Исправлены крупные
DECIMALвставки вexecutemany(). - Исправлен неправильный тип резерва для параметров NULL.
- Фиксированное исключение — туда-обратно огурцы и нерассоленные рейсы.
- Исправлено:
nextset()это сохраняетPRINTсообщения между наборами результатов. - Исправлена
Rowобработка вexecutemany()резервном пути данных при выполнении. - Исправлена проверка типов метода fetch для инструментов статического анализа.
MSSQL-Python 1.8.0
Дата выпуска: май 2026 г.
Усовершенствования
Поддержка ActiveDirectoryMSI для массового копирования
cursor.bulkcopy() теперь поддерживает Authentication=ActiveDirectoryMSI для системно назначаемых и назначаемых пользователем управляемых удостоверений.
Для получения дополнительной информации см. разделы «Массовое копирование» и аутентификация Microsoft Entra.
Индексация строк по строковому ключу
Теперь вы можете получать доступ к значениям строк по названию столбца, например row["col"], помимо позиционного индексирования и доступа к атрибутам.
Для получения дополнительной информации см. объекты рядов.
Обновление драйвера ODBC, входящего в комплект
Включённый в комплект драйвер Microsoft ODBC для SQL Server был обновлён до версии 18.6.2.1.
Исправления ошибок
- Исправлены проблемы с отложенным сроком службы атрибута соединения при аутентификации на основе токенов.
- Исправлен повторный разбор строки подключения в процессе аутентификации.
- Фиксированные
executemany()типовые аннотации для входов последовательностей.
MSSQL-Python 1.7.1
Дата выпуска: май 2026 г.
Усовершенствования
Расширенное покрытие колёс и улучшение производительности
В этот выпуск входят:
- Колёса, совместимые с RHEL 8.
- Восстановлены колеса macOS Python 3.10
universal2. - Улучшена обработка UTF-16 благодаря
simdutf. - Оптимизированный
execute()горячий путь.
Влияние на производительность: пропускная способность пакетного выполнения улучшается 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 г.
Усовершенствования
Очистка строки подключения на основе парсера
Для санитизации строк подключения теперь используется парсер вместо регулярных выражений, поэтому строки подключения, содержащие специальные символы в полях пароля и значения, заключённые в фигурные скобки, теперь разбираются корректно.
Дополнительные сведения см. в разделе Строки подключения.
Исправления ошибок
- Исправлено освобождение 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 строк в верхнем регистре. Настройте его на уровне модуля или для каждого соединения.
Для получения дополнительной информации см. раздел Конфигурация модуля.
Класс Row для публичного экспорта
Класс Row теперь экспортируется на верхнем уровне для аннотаций типов.
Для получения дополнительной информации см. объекты рядов.
Исправления ошибок
- Исправлено ложное обнаружение
?внутри идентификаторов в скобках, строковых литералов и комментариев. - Исправлено привязывание параметров NULL для
VARBINARYстолбцов (больше не вызывает неявных ошибок преобразования). - Исправлена проблема потери микросекунд в значениях
datetime.timeпри преобразовании туда и обратно в столбцах сTIME(1)поTIME(7). - Исправлен путь выборки Arrow, чтобы он корректно включал доли секунды для столбцов
TIME. - Исправлено массовое копирование с помощью методов аутентификации Microsoft Entra ID (устаревшие поля учетных данных больше не вызывают ошибок валидации).
- Кэшированные экземпляры учетных данных Azure Identity на уровне модуля для улучшения производительности аутентификации.
MSSQL-Python 1.4.0
Дата выхода: февраль 2026
Новые возможности
Поддержка массового копирования
Высокопроизводительная массовая загрузка данных теперь доступна через cursor.bulkcopy(). Метод принимает варианты для batch_size, timeout, column_mappings, keep_identity, check_constraintstable_lockkeep_nullsfire_triggersи .use_internal_transaction
Для получения дополнительной информации см. Массовое копирование.
Improvements
- Оптимизации производительности для больших наборов результатов.
- Снижение использования памяти во время пакетных операций.
- Улучшенные сообщения об ошибках при сбоях массового копирования.
MSSQL-Python 1.3.0
Дата выхода: январь 2026
Новые возможности
Класс настроек
Настройте поведение всего модуля с помощью нового класса Settings, который включает параметр lowercase для имён столбцов в cursor.description.
Для получения дополнительной информации см. раздел Конфигурация модуля.
Improvements
- Улучшена обработка тайм-аута подключения во время аварийного переключения Azure SQL.
- Улучшена совместимость с Python 3.13.
MSSQL-Python 1.2.0
Дата выхода: январь 2026
Новые возможности
Методы обнаружения схем
Новые методы курсора исследуют метаданные базы данных: tables(), columns(), , primaryKeys()foreignKeys(), procedures()statistics(), и getTypeInfo().
Для получения дополнительной информации см. Открытие схемы.
Improvements
- Улучшенное кэширование метаданных для повторяющихся запросов схемы.
- Более эффективная обработка вычисленных столбцов в
columns()результатах.
MSSQL-Python 1.1.0
Дата выхода: декабрь 2025
Новые возможности
Пользовательские выходные преобразователи
Регистрируйте пользовательские функции для преобразования значений столбцов при выборке с помощью add_output_converter(), get_output_converter(), remove_output_converter() и clear_output_converters().
Для получения дополнительной информации см. раздел «Пользовательские конвертеры типов».
Improvements
- Улучшенные сообщения об ошибках при ошибках преобразования типов.
- Поддержка преобразовательных функций, возвращающих
None.
MSSQL-Python 1.0.0
Дата выхода: ноябрь 2025
Первый общедоступный релиз
Первый общий выпуск mssql-python — нативного драйвера Python от Microsoft для SQL Server.
Для получения дополнительной информации см. mssql-python driver.
Основные возможности
- Архитектура 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.