==================================================== MySQL Connector/Python - Release Notes & Changes ==================================================== MySQL Connector/Python Copyright (c) 2009, 2026, Oracle and/or its affiliates. Full release notes: http://dev.mysql.com/doc/relnotes/connector-python/en/ v9.6.0 ====== This release contains no functional changes. v9.5.0 ====== - WL#17049: Remove usage of SQL functions MD5() and SHA1() - WL#17088: MySQL Connector Python HeatWave GenAI and ML SDK - WL#17048: Remove Python 3.9 support - WL#17045: Add support for Python 3.14 v9.4.0 ====== - WL#16966: Upgrade Python lz4 version - WL#16963: Update the OpenTelemetry version - WL#16962: Update the Python Protobuf version - WL#16954: Make sdist packages pip installable - BUG#38072835: Authentication OCI plugin option parameters not being supported by the aio connector - BUG#37868219: RPM packages have incorrect copyright year in their metadata - BUG#37859771: mysql/connector python version 9.3.0 has a regression which cannot persist binary data with percent signs in it - BUG#37820231: Text based django ORM filters doesn't work with Connector/Python - BUG#37806057: Rename extra option (when installing wheel package) to install webauthn functionality dependencies - BUG#37774513: Inconsistent conversion to_sql for cext vs pure python - BUG#37642447: The license type is missing from RPM package - BUG#37627508: mysql/connector python fetchmany() has an off by one bug when argument given as 1 - BUG#37047789: Python connector does not support Django enum - BUG#36733242: Contribution: Add Connection Pooling Support for AsyncIO Connector - BUG#36452514: Missing version info resources - BUG#34950958: MySQL Python Connector doesn't work with ssh in the same process - BUG#34844347: Freezes on connection via sshtunnel v9.3.0 ====== - WL#16754: The host wildcard no longer applies to localhost - WL#16752: Deprecate class methods to access instance data or to know instance internal state - WL#16327: Remove Cursors Prepared Raw and Named Tuple - BUG#37541353: (Contribution) Fix typing annotation of MySQLConnectionAbstract's close function - BUG#37453587: Github links in PyPI project's pages do not work - BUG#37418436: Arbitrary File Read in MySQL Python Client library - BUG#37410052: Bad formatting of exceptions when connecting with Unix sockets - BUG#37399636: The C-extension has a memory leak when working with prepared statements - BUG#37275524: Exception is not interpreted properly on prepared statements when C extension is in use - BUG#36098290: mysql-connector-python is distributed without setup.py or pyproject.toml v9.2.0 ====== - WL#16381: Add support for read and write timeouts - WL#16285: Remake Multi Statement Execution - BUG#37145655: MySQL Connector/Python Configuration Files RCE - BUG#36702939: connection_cext has a memory leak in the python mysql-connector - BUG#36922645: Option `connection_timeout` is overwritten and works as "query" timeout instead - BUG#36126909: "Unread result found" exception/bad MySQLCursor.statement when query text contains code comments - BUG#35810050: Executing multiple statements fails when importing Sakila v9.1.0 ====== - WL#16452: Bundle all installable authentication plugins when building the C-extension - WL#16444: Drop build support for DEB packages - WL#16442: Upgrade gssapi version to 1.8.3 - WL#16411: Improve wheel metadata information for Classic and XDevAPI connectors - WL#16341: OpenID Connect (Oauth2 - JWT) Authentication Support - WL#16307: Remove Python 3.8 support - WL#16306: Add support for Python 3.13 - BUG#37055435: Connection fails during the TLS negotiation when specifying TLSv1.3 ciphers - BUG#37013057: mysql-connector-python Parameterized query SQL injection - BUG#36765200: python mysql connector 8.3.0 raise %-.100s:%u when input a wrong host - BUG#36577957: Update charset/collation description indicate this is 16 bits v9.0.0 ====== - WL#16350: Update dnspython version - WL#16318: Deprecate Cursors Prepared Raw and Named Tuple - WL#16284: Update the Python Protobuf version - WL#16283: Remove OpenTelemetry Bundled Installation - BUG#36664998: Packets out of order error is raised while changing user in aio - BUG#36611371: Update dnspython required versions to allow latest 2.6.1 - BUG#36570707: Collation set on connect using C-Extension is ignored - BUG#36476195: Incorrect escaping in pure Python mode if sql_mode includes NO_BACKSLASH_ESCAPES - BUG#36289767: MySQLCursorBufferedRaw does not skip conversion v8.4.0 ====== - WL#16203: GPL License Exception Update - WL#16173: Update allowed cipher and cipher-suite lists - WL#16164: Implement support for new vector data type - WL#16127: Remove the FIDO authentication mechanism - WL#16053: Support GSSAPI/Kerberos authentication on Windows using authentication_ldap_sasl_client plug-in for C-extension - BUG#36227964: Improve OpenTelemetry span coverage - BUG#36167880: Massive memory leak mysqlx native Protobuf adding to collection v8.3.0 ====== - WL#16015: Remove use of removed COM_ commands - WL#15985: Support GSSAPI/Kerberos authentication on Windows using authentication_ldap_sasl_client plug-in for Pure Python - WL#15983: Stop using mysql_ssl_set api - WL#15982: Remove use of mysql_shutdown - WL#15950: Support query parameters for prepared statements - WL#15942: Improve type hints and standardize byte type handling - WL#15836: Split mysql and mysqlx into different packages - WL#15523: Support Python DB API asynchronous execution - BUG#35912790: Binary strings are converted when using prepared statements - BUG#35832148: Fix Django timezone.utc deprecation warning - BUG#35710145: Bad MySQLCursor.statement and result when query text contains code comments - BUG#21390859: STATEMENTS GET OUT OF SYNCH WITH RESULT SETS v8.2.0 ====== - WL#15664: Add support for Python 3.12 - WL#15623: Improve the authentication module - WL#15218: Support WebAuthn authentication - BUG#35755852: Django config raise_on_warnings is ignored without isolation_level - BUG#35733608: Server stmt spans right after the cnx aren't related to the connector's cnx span - BUG#35547876: C/Python 8.1.0 type check build fails in the pb2 branch - BUG#35544123: Kerberos unit tests configuration is outdated - BUG#35503506: Query on information_schema.columns returns bytes - BUG#35503377: First connected to server v8, then any v5 connections fail with utf8mb4 charset - BUG#35141645: Memory leak in the mysqlx C extension v8.1.0 ====== - WL#15749: Remove DMG and MSI support - WL#15672: Upgrade Python Protobuf version to 4.21.12 - WL#15630: Remove Python 3.7 support - WL#15629: Add OpenTelemetry tracing - WL#15591: Improve the network module - BUG#35425076: Fix deallocating None error - BUG#35349093: Compression doesn't work with C extension API - BUG#35338384: PIP installs incompatible Connector/Python packages - BUG#35318413: Fix charset mapping for MySQL 8.1.0 - BUG#35278365: Fix UnicodeDecodeError with a long field name alias (c-ext) - BUG#35212199: Check for identifier quotes in the database name - BUG#35140271: Regex split hanging in cursor.execute(..., multi=True) for complex queries - BUG#29115406: CONTRIBUTION - FIX RECV COMPRESS BUG v8.0.33 ======= - WL#15528: Add docker build/test support for existing server - WL#15483: Support OCI ephemeral key-based authentication - WL#15435: Improve the logging system - WL#15401: Support for type hints in module mysqlx - BUG#35233031: Connector/Python should not default to mysql_native_password - BUG#35015758: COM_QUIT should not be called in the connection phase - BUG#34984850: Fix binary conversion with NO_BACKSLASH_ESCAPES mode - BUG#31355895: Fix slow executemany() with insert statements - BUG#30103652: Connector/Python ClientFlag SESION_TRACK is a misspelling - BUG#27489972: Several COM_% commands have been deprecated - BUG#27359063: Support for dictionary, named_tuple, and raw to prepared statements cursor - BUG#21476351: Too small chunks when sending huge parameters with COM_STMT_SEND_LONG_DATA v8.0.32 ======= - WL#15348: Support MIT Kerberos library on Windows - WL#15036: Support for type hints - WL#14861: Remove distutils support - BUG#34773422: Connector/Python 8.0.31 installation fails if Python version is 3.11.0 - BUG#34727432: Fix Django datetime error when USE_TZ=True in settings - BUG#34710366: Django implementation does not pass unit tests - BUG#34695103: Remove debug messages that shows authentication data - BUG#34690501: Connector/Python depends on outdated protobuf - BUG#34689812: Fix datetime conversion when using prepared cursors - BUG#34675508: Character set 'utf8' unsupported in python mysql connector when using MariaDB - BUG#34655520: Wrong MySQLCursor.statement values in the results of cursor.execute(..., multi=True) - BUG#34556157: Kerberos authorization fails when using SSPI as security interface - BUG#34499578: MySQLCursor.executemany() fails to correctly identify BULK data loading ops - BUG#34467201: Add init_command connection option - BUG#33904362: mysqlx (X DevAPI) does not work properly with Russian characters - BUG#32625155: Tests fail against group replication cluster - BUG#30089671: Fix decoding VARBINARY columns when using a prepared cursor - BUG#28020811: Fix multiple reference leaks in the C extension - BUG#27426532: Reduce callproc roundtrip time - BUG#24364556: Improve warning behavior - BUG#23342572: Allow dictionaries as parameters in prepared statements - BUG#23339387: Add MySQLCursorPreparedDict option - BUG#22906307: MySQLConverter.escape() does not work for dates - BUG#20504804: cursor.executemany() fails with INSERT IGNORE v8.0.31 ======= - WL#15156: Add support for Python 3.11 - BUG#34373612: Fix the assumption that gcc is the default compiler - BUG#34283402: Binary data starting with 0x00 are returned as empty string - BUG#34217492: Exec of stored procedures with args fails when db prefix used - BUG#33987119: TEXT and with a _bin collation (e.g: utf8mb4_bin) are considered as bytes object - BUG#28491115: Connector/Python crashes on 0 time value - BUG#28295478: Align exception types raised by pure Python and c-ext - BUG#27634910: Add warning count method to cursors - BUG#21529893: Resultset handling not proper in C-Python with c-ext - BUG#21463298: Fix weakly-referenced object no longer exists exception - BUG#21402805: Unbound local error when charset name is given as empty to set_charset_collation() v8.0.30 ======= - WL#15212: Update collation mappings - WL#15151: Increase to 88 characters per line - WL#15137: Fix linting issues - WL#15035: Enforce PEP 7 and PEP 8 coding style - WL#14822: Refactor the authentication plugin mechanism - WL#14815: Support OpenSSL 3.0 - BUG#34260344: Disallow empty strings in collection fields - BUG#34231226: Generated classes do not work with the latest Protobuf - BUG#34228442: Fix NO_BACKSLASH_ESCAPES SQL mode support in c-ext - BUG#34223015: Invalidate the usage of non-compatible cursor types - BUG#34127959: Add isolation level support in Django backend - BUG#33923516: Allow tuple of dictionaries as "failover" argument - BUG#28821983: Fix rounding errors for decimal values - BUG#28295504: Disable SSL when using Unix socket connections v8.0.29 ======= - WL#14860: Support FIDO authentication (c-ext) - WL#14852: Align TLS option checking across connectors - WL#14824: Remove Python 3.6 support - WL#14679: Allow custom class for data type conversion in Django backend - WL#14665: SSPI Kerberos authentication for Windows (pure-python) - BUG#33861549: Replace SHOW VARIABLES inefficient statements - BUG#33747585: Fix error when using an expression as a column without an alias - BUG#33729842: Character set 'utf8mb3' support - BUG#33481203: OverflowError for MySQL BIGINT on c-ext - BUG#33203161: Exception is thrown on close connection with pooling - BUG#30203754: Prepared stmt fails on cext with BIGINTS - BUG#28877987: Return bytes or bytearray if decoding fails - BUG#27634914: Remove mention of unsupported functionality in Session docstring - BUG#23338623: Add support for Decimal parsing in protocol.py - BUG#23324748: Guarantee file closing of input files in optionfile - BUG#21528553: Fix API inconsistency when using consume_results=True - BUG#21498719: Fix conversion of Python bytearray (c-ext) - BUG#20065830: NaN is not supported v8.0.28 ======= - WL#14814: Remove support for TLS 1.0 and 1.1 - WL#14813: Add support for Python 3.10 - WL#14720: Support for Multi Factor authentication (pure Python) - WL#14667: Support for Multi Factor authentication (c-ext) - BUG#33486094: Stored value in Decimal field is returned as str on prepared pure python cursor - BUG#33410592: Fix compiler warnings - BUG#33409819: Fix failure when using a conversion class in CMySQLConnection - BUG#27358941: Invalid types for params silently ignored in execute method v8.0.27 ======= - WL#14710: Support OCI IAM authentication - WL#14689: Fallback conversion to str for types incompatible with MySQL - WL#14664: Allow SSPI Kerberos library usage with c-ext - BUG#33177337: Connection with chained SSL certs fails with ssl_verify_identity - BUG#28641350: mysqlx.result.Row objects cannot be printed directly v8.0.26 ======= - WL#14634: Running unit tests against external server - WL#14542: Deprecate TLS 1.0 and 1.1 - WL#14440: Support for authentication_kerberos_client authentication plugin - WL#14306: Integrate QA tests into Connector/Python test suite - WL#14237: Support query attributes - BUG#32947160: Remove MySQLdb module dependency from Django backend - BUG#32838010: Fix option files parsing with include directive - BUG#32789076: MSI is missing required libraries to use auth_ldap_client plugin - BUG#32778827: Raise an error if the _id is different when replacing a document - BUG#32740486: Fix typo in docstring - BUG#32623479: The X DevAPI returns str for binary types values - BUG#32585611: Fix broken links in X DevAPI reference documentation search - BUG#31528783: Fix number with ZEROFILL not handled by C extension v8.0.25 ======= This release contains no functional changes and is published to align the version number with the MySQL Server 8.0.25 release. v8.0.24 ======= - WL#14424: Improve timeout error messages - WL#14240: Remove Python 3.5 support - WL#14239: Remove Python 2.7 support - WL#14212: Support connection close notification - WL#14027: Add support for Python 3.9 - BUG#32532744: MSI destination folder page lacks details of what installs - BUG#32497631: Prepared statements fail when parameters are not given - BUG#32496788: Prepared statements accepts any type of parameters - BUG#32435181: Add support for Django 3.2 - BUG#32162928: Change user command fails on pure python implementation - BUG#32120659: Prepared statements w/o parameters violates MySQL protocol - BUG#32039427: Remove python 3.4 support in MSI packaging - BUG#32029891: Add context manager support for pooled connections - BUG#31490101: Fix wrong cast of Python unicode to std::string - BUG#31315173: Added documentation for multi-host and failover - BUG#30416704: Binary columns returned as strings v8.0.23 ======= - WL#14263: Add support for SCRAM-SHA-256 - WL#14238: Deprecate Python 2.7 support - WL#14215: Replace language in APIs and source code/docs - WL#14213: Support GSSAPI - Kerberos auth - BUG#32165864: Fix segmentation fault when using invalid SQL with prepared statements - BUG#31882419: Fix error when getting the connection ID from a CMySQLConnection - BUG#29195610: Fix cursor.callproc() using namedtuple and dictionary cursors - BUG#26834307: Make cursor.fetchone() and cursor.fetchmany() PEP 249 compliant - BUG#24938411: Fix datetime microsecond conversion v8.0.22 ======= - WL#14110: Add support for SCRAM-SHA-1 - WL#14098: Add option to specify LOAD DATA LOCAL IN PATH - WL#13997: Refactoring of the building system - WL#13995: Add support for configurable compression levels - WL#13994: Support clear text passwords - WL#13380: Add support for Django 3.0 - BUG#31335275: Fix memory leak when using the Decimal data type - BUG#31267800: Include copyright header in the modules generated by protoc - BUG#27535063: Fix wrong error message when specifying the collation for a non TEXT field - BUG#20811567: Support use_pure option in config_files v8.0.21 ======= - WL#13847: Add support for context managers - WL#13059: Add schema validation support - WL#12501: Connection compression - BUG#31098686: Unittests for CMD_CHANGE_USER does not cover CMySQLConnection defaults - BUG#31060730: Skip pure Python tests if Protobuf is not available - BUG#30996790: Fix connect_timeout option behavior - BUG#30950184: Fix error when using the fractional part in DATETIME - BUG#29808262: Fix BLOB types conversion - BUG#29181907: Fix discovering of MySQL libraries - BUG#28627768: JSON_REPLACE not working correctly for SQL tables - BUG#27602636: Expressions in Table.update.set() raises an exception - BUG#27489937: Support for connection pools in the C extension v8.0.20 ======= - WL#13334: Connector support for failover and load-balancing - BUG#30643277: Add missing raise statement when queue is full - BUG#30608703: Fix fetchmany when the last fetch is not a full batch v8.0.19 ======= - WL#13531: Remove xplugin namespace - WL#13372: DNS SRV support - WL#12738: Specify TLS ciphers to be used by a client or session - BUG#30270760: Fix reserved filed should have a length of 22 - BUG#29417117: Close file in handle load data infile v8.0.18 ======= - WL#13330: Single C/Python (Win) MSI installer - WL#13335: Connectors should handle expired password sandbox without SET operations - WL#13194: Add support for Python 3.8 - BUG#29909157: Table scans of floats causes memory leak with the C extension - BUG#25349794: Add read_default_file alias for option_files in connect() v8.0.17 ======= - WL#13155: Support new utf8mb4 bin collation - WL#12737: Add overlaps and not_overlaps as operator - WL#12735: Add README.rst and CONTRIBUTING.rst files - WL#12227: Indexing array fields - WL#12085: Support cursor prepared statements with C extension - BUG#29855733: Fix error during connection using charset and collation combination - BUG#29833590: Calling execute() should fetch active results - BUG#21072758: Support for connection attributes classic v8.0.16 ======= - WL#12864: Upgrade of Protobuf version to 3.6.1 - WL#12863: Drop support for Django versions older than 1.11 - WL#12489: Support new session reset functionality - WL#12488: Support for session-connect-attributes - WL#12297: Expose metadata about the source and binaries - WL#12225: Prepared statement support - BUG#29324966: Add missing username connection argument for driver compatibility - BUG#29278489: Fix wrong user and group for Solaris packages - BUG#29001628: Fix access by column label in Table.select() - BUG#28479054: Fix Python interpreter crash due to memory corruption - BUG#27897881: Empty LONG BLOB throws an IndexError v8.0.15 ======= - BUG#29260128: Disable load data local infile by default v8.0.14 ======= - WL#12607: Handling of Default Schema - WL#12493: Standardize count method - WL#12492: Be prepared for initial notice on connection - BUG#28646344: Remove expression parsing on values - BUG#28280321: Fix segmentation fault when using unicode characters in tables - BUG#27794178: Using use_pure=False should raise an error if cext is not available - BUG#27434751: Add a TLS/SSL option to verify server name v8.0.13 ======= - WL#12239: Add support for Python 3.7 - WL#12226: Implement connect timeout - WL#11897: Implement connection pooling for xprotocol - BUG#28278352: C extension mysqlx Collection.add() leaks memory in sequential calls - BUG#28037275: Missing bind parameters causes segfault or unclear error message - BUG#27528819: Support special characters in the user and password using URI v8.0.12 ======= - WL#11951: Consolidate discrepancies between pure and c extension - WL#11932: Remove Fabric support - WL#11898: Core API v1 alignment - BUG#28188883: Use utf8mb4 as the default character set - BUG#28133321: Fix incorrect columns names representing aggregate functions - BUG#27962293: Fix Django 2.0 and MySQL 8.0 compatibility issues - BUG#27567999: Fix wrong docstring in ModifyStatement.patch() - BUG#27277937: Fix confusing error message when using an unsupported collation - BUG#26834200: Deprecate Row.get_string() method - BUG#26660624: Fix missing install option in documentation v8.0.11 ======= - WL#11668: Add SHA256_MEMORY authentication mechanism - WL#11614: Enable C extension by default - WL#11448: New document _id generation support - WL#11282: Support new locking modes NOWAIT and SKIP LOCKED - BUG#27639119: Use a list of dictionaries to store warnings - BUG#27634885: Update error codes for MySQL 8.0.11 - BUG#27589450: Remove upsert functionality from WriteStatement class - BUG#27528842: Fix internal queries open for SQL injection - BUG#27364914: Cursor prepared statements do not convert strings - BUG#24953913: Fix failing unittests - BUG#24948205: Results from JSON_TYPE() are returned as bytearray - BUG#24948186: JSON type results are bytearray instead of corresponding python type v8.0.6 ====== - WL#11372: Remove configuration API - WL#11303: Remove CreateTable and CreateView - WL#11281: Transaction savepoints - WL#11278: Collection.create_index - WL#11149: Create Pylint test for mysqlx - WL#11142: Modify/MergePatch - WL#11079: Add support for Python 3.6 v8.0.5 ====== - WL#11073: Add caching_sha2_password authentication plugin - WL#10975: Add Single document operations - WL#10974: Add Row locking methods to find and select operations - WL#10973: Allow JSON types as operands for IN operator - WL#10899: Add support for pure Python implementation of Protobuf - WL#10771: Add SHA256 authentication - WL#10053: Configuration handling interface v8.0.4 ====== - WL#10772: Cleanup Drop APIs - WL#10770: Ensure all Session connections are secure by default - WL#10754: Forbid modify() and remove() with no condition - WL#10659: Support utf8mb4 as default charset - WL#10658: Remove concept of NodeSession - WL#10657: Move version number to 8.0 - WL#10198: Add Protobuf C++ extension implementation - WL#10004: Document UUID generation - BUG#26175003: Fix Session.sql() when using unicode SQL statements with Python 2.7 - BUG#26161838: Dropping an non-existing index should succeed silently - BUG#26160876: Fix issue when using empty condition in Collection.remove() and Table.delete() - BUG#26029811: Improve error thrown when using an invalid parameter in bind() - BUG#25991574: Fix Collection.remove() and Table.delete() missing filters v2.2.3 ====== - WL#10452: Add Protobuf C++ extension for Linux variants and Mac OSX - WL#10081: DevAPI: IPv6 support - BUG#25614860: Fix defined_as method in the view creation - BUG#25519251: SelectStatement does not implement order_by() method - BUG#25436568: Update available operators for XPlugin - BUG#24954006: Add missing items in CHANGES.txt - BUG#24578507: Fix import error using Python 2.6 - BUG#23636962: Fix improper error message when creating a Session - BUG#23568207: Fix default aliases for projection fields - BUG#23567724: Fix operator names v2.2.2 ====== - DevAPI: Schema.create_table - DevAPI: Flexible Parameter Lists - DevAPI: New transports: Unix domain socket - DevAPI: Core TLS/SSL options for the mysqlx URI scheme - DevAPI: View DDL with support for partitioning in a cluster / sharding - BUG#24520850: Fix unexpected behavior when using an empty collection name v2.2.1 ====== - Add support for Protocol Buffers 3 - Add View support (without DDL) - Implement get_default_schema() method in BaseSchema - DevAPI: Per ReplicaSet SQL execution - DevAPI: XSession accepts a list of routers - DevAPI: Define action on adding empty list of documents - BUG#23729357: Fix fetching BIT datatype - BUG#23583381: Add who_am_i and am_i_real methods to DatabaseObject - BUG#23568257: Add fetch_one method to mysqlx.result - BUG#23550743: Add close method to XSession and NodeSession - BUG#23550057: Add support for URI as connection data v2.2.0 ====== - Provide initial implementation of new DevAPI