diff -pruN 9.4.0-1/CHANGES.txt 9.5.0-1/CHANGES.txt
--- 9.4.0-1/CHANGES.txt	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/CHANGES.txt	2025-10-15 05:27:11.000000000 +0000
@@ -8,6 +8,14 @@ Copyright (c) 2009, 2025, Oracle and/or
 Full release notes:
  http://dev.mysql.com/doc/relnotes/connector-python/en/
 
+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
 ======
 
diff -pruN 9.4.0-1/LICENSE.txt 9.5.0-1/LICENSE.txt
--- 9.4.0-1/LICENSE.txt	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/LICENSE.txt	2025-10-15 05:27:11.000000000 +0000
@@ -1,6 +1,6 @@
 Licensing Information User Manual
 
-MySQL Connector/Python 9.4.0 Community
+MySQL Connector/Python 9.5.0 Community
      __________________________________________________________________
 
 Introduction
@@ -8,18 +8,18 @@ Introduction
    This License Information User Manual contains Oracle's product license
    and other licensing information, including licensing information for
    third-party software which may be included in this distribution of
-   MySQL Connector/Python 9.4.0 Community.
+   MySQL Connector/Python 9.5.0 Community.
 
-   Last updated: June 2025
+   Last updated: September 2025
 
 Licensing Information
 
-   This release of MySQL Connector/Python 9.4.0 Community is brought to
+   This release of MySQL Connector/Python 9.5.0 Community is brought to
    you by the MySQL team at Oracle. This software is released under
    version 2 of the GNU General Public License (GPLv2), as set forth
    below, with the following additional permissions:
 
-   This distribution of MySQL Connector/Python 9.4.0 Community is designed
+   This distribution of MySQL Connector/Python 9.5.0 Community is designed
    to work with certain software (including but not limited to OpenSSL)
    that is licensed under separate terms, as designated in a particular
    file or component or in the license documentation. Without limiting
@@ -2033,6 +2033,1361 @@ The following notice applies to
    ======================================================================
    ======================================================================
 
+LangChain
+
+The MIT License
+
+Copyright (c) Harrison Chase
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+4th Party Dependencies
+----------------------
+
+aiohttp
+-------
+Copyright aio-libs contributors.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+aiosignal
+---------
+License: Apache-2.0
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+
+frozenlist
+----------
+License: Apache-2.0
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+
+async-timeout
+-------------
+License: Apache-2.0
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+aio-libs
+--------
+Copyright 2016-2020 aio-libs collaboration.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+
+attrs
+-----
+Copyright (c) 2015 Hynek Schlawack and the attrs contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+charset-normalizer
+------------------
+Copyright (c) 2019 TAHRI Ahmed R.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+multidict
+---------
+   Copyright 2016-2021 Andrew Svetlov and aio-libs team
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+
+yarl
+----
+License: Apache-2.0
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+
+idna
+----
+Copyright (c) 2013-2021, Kim Davies All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    Redistributions of source code must retain the above copyright notice,
+    this list of conditions and the following disclaimer.
+
+    Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+
+    Neither the name of the copyright holder nor the names of its contributors
+    may be used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
+
+anyio
+-----
+Copyright (c) 2018 Alex Grönholm
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+exceptiongroup
+--------------
+Copyright (c) 2022 Alex Grönholm
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+This project contains code copied from the Python standard library.
+The following is the required license notice for those parts.
+A copy of the Python Software Foundation license, version 2 license can be found
+in the 'Standard Licenses' section
+
+sniffio
+-------
+This software is made available under the terms of *either* of the
+licenses found in LICENSE.APACHE2 or LICENSE.MIT. Contributions to are
+made under the terms of *both* these licenses.
+
+Apache License
+            Version 2.0, January 2004
+            http://www.apache.org/licenses/
+
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+The MIT License (MIT)
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+dataclasses-json
+----------------
+Copyright (c) 2019 Charles Li and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+marshmallow
+-----------
+Copyright 2021 Steven Loria and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+packaging
+---------
+This software is made available under the terms of *either* of the licenses
+found in LICENSE.APACHE or LICENSE.BSD. Contributions to this software is made
+under the terms of *both* these licenses.
+
+Apache License
+            Version 2.0, January 2004
+            http://www.apache.org/licenses/
+
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+Copyright (c) Donald Stufft and individual contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    1. Redistributions of source code must retain the above copyright notice,
+       this list of conditions and the following disclaimer.
+
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+typing-inspect
+--------------
+Copyright (c) 2017-2019 Ivan Levkivskyi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+mypy-extensions
+---------------
+Mypy extensions are licensed under the terms of the MIT license, reproduced belo
+w.
+
+The MIT License
+
+Copyright (c) 2016-2017 Jukka Lehtosalo and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+
+typing-extensions
+-----------------
+License: PSF
+A copy of the Python Software Foundation license, version 2 license can be found
+in the 'Standard Licenses' section
+
+ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION
+----------------------------------------------------------------------
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
+
+jsonpatch
+---------
+Copyright (c) 2011 Stefan Kögl <stefan@skoegl.net>
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following
+disclaimer in the documentation and/or other materials provided
+with the distribution.
+3. Neither the name of the copyright holder nor the names of
+its contributors may be used to endorse or promote products
+derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+jsonpointer
+-----------
+Copyright (c) 2011 Stefan Kögl <stefan@skoegl.net>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+   derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+langsmith
+---------
+Copyright (c) 2023 LangChain
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+pydantic
+--------
+Copyright (c) 2017 to present Pydantic Services Inc. and individual contributors
+.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+annotated-types
+---------------
+Copyright (c) 2022 the contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+
+pydantic-core
+-------------
+Copyright (c) 2022 Samuel Colvin
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+numpy
+-----
+Copyright (c) 2005-2023, NumPy Developers.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+       copyright notice, this list of conditions and the following
+       disclaimer in the documentation and/or other materials provided
+       with the distribution.
+
+    * Neither the name of the NumPy Developers nor the names of any
+       contributors may be used to endorse or promote products derived
+       from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+----
+This binary distribution of NumPy also bundles the following software:
+
+Name: OpenBLAS
+Files: extra-dll\libopenb*.dll
+Description: bundled as a dynamically linked library
+Availability: https://github.com/xianyi/OpenBLAS/
+License: 3-clause BSD
+  Copyright (c) 2011-2014, The OpenBLAS Project
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+
+     2. Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in
+        the documentation and/or other materials provided with the
+        distribution.
+     3. Neither the name of the OpenBLAS project nor the names of
+        its contributors may be used to endorse or promote products
+        derived from this software without specific prior written
+        permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT
+IAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: LAPACK
+Files: extra-dll\libopenb*.dll
+Description: bundled in OpenBLAS
+Availability: https://github.com/xianyi/OpenBLAS/
+License 3-clause BSD
+  Copyright (c) 1992-2013 The University of Tennessee and The University
+                          of Tennessee Research Foundation.  All rights
+                          reserved.
+  Copyright (c) 2000-2013 The University of California Berkeley. All
+                          rights reserved.
+  Copyright (c) 2006-2013 The University of Colorado Denver.  All rights
+                          reserved.
+
+  $COPYRIGHT$
+
+  Additional copyrights may follow
+
+  $HEADER$
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer listed
+    in this license in the documentation and/or other materials
+    provided with the distribution.
+
+  - Neither the name of the copyright holders nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.
+
+  The copyright holders provide no reassurances that the source code
+  provided does not infringe any patent, copyright, or any other
+  intellectual property rights of third parties.  The copyright holders
+  disclaim any liability to any recipient for claims brought against
+  recipient by any third party for infringement of that parties
+  intellectual property rights.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+LICENSES_bundled.txt
+--------------------
+The NumPy repository and source distributions bundle several libraries that are
+compatibly licensed.  We list these here.
+
+Name: lapack-lite
+Files: numpy/linalg/lapack_lite/*
+License: BSD-3-Clause
+  For details, see numpy/linalg/lapack_lite/LICENSE.txt
+
+Name: tempita
+Files: tools/npy_tempita/*
+License: MIT
+  For details, see tools/npy_tempita/license.txt
+
+Name: dragon4
+Files: numpy/core/src/multiarray/dragon4.c
+License: MIT
+  For license text, see numpy/core/src/multiarray/dragon4.c
+
+Name: libdivide
+Files: numpy/core/include/numpy/libdivide/*
+License: Zlib
+  For license text, see numpy/core/include/numpy/libdivide/LICENSE.txt
+
+--------------- RECURSIVE LICENSE Mentioned in  LICENSES_bundled.txt -----------
+---------
+--------------------------------------------------------------------------------
+---------
+lapack-lite
+Copyright (c) 1992-2022 The University of Tennessee and The University
+                        of Tennessee Research Foundation.  All rights
+                        reserved.
+Copyright (c) 2000-2022 The University of California Berkeley. All
+                        rights reserved.
+Copyright (c) 2006-2022 The University of Colorado Denver.  All rights
+                        reserved.
+
+Additional copyrights may follow
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+- Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer listed
+  in this license in the documentation and/or other materials
+  provided with the distribution.
+
+- Neither the name of the copyright holders nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+The copyright holders provide no reassurances that the source code
+provided does not infringe any patent, copyright, or any other
+intellectual property rights of third parties.  The copyright holders
+disclaim any liability to any recipient for claims brought against
+recipient by any third party for infringement of that parties
+intellectual property rights.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+------------------------------------------------------------------------
+tempita
+
+Copyright (c) 2022 Ian Bicking and Contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+----------------------------------------------------------------------------
+dragon4
+  Copyright (c) 2022 Ryan Juckett
+
+  Permission is hereby granted, free of charge, to any person obtaining a copy
+  of this software and associated documentation files (the "Software"), to
+  deal in the Software without restriction, including without limitation the
+  rights to use, copy, modify, merge, publish, distribute, sublicense, andor
+  sell copies of the Software, and to permit persons to whom the Software is
+  furnished to do so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in
+  all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+  IN THE SOFTWARE.
+
+--------------------------------------------------------------------------------
+libdivide
+
+zlib License
+  Copyright (C) 2010 - 2022 ridiculous_fish, <libdivide@ridiculousfish.com>
+  Copyright (C) 2016 - 2022 Kim Walisch, <kim.walisch@gmail.com>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+--------------------------------------------------------------------------------
+--
+LICENSES_bundled in different directories:
+--------------------------------------------------------------------------------
+---
+
+The NumPy repository and source distributions bundle several libraries that are
+compatibly licensed.  We list these here.
+
+Name: SPLITMIX64
+Files: /numpy/blob/numpy/random/src/splitmix64/*
+License: Sebastiano Vigna (c) 2005-2019 NumPy Developers, Licensed
+under the 3-clause BSD License.
+For details, see /numpy/blob/numpy/random/src/splitmix64/LICENSE.md
+
+Name: SFC64
+Files: /numpy/blob/numpy/random/src/sfc64/*
+License: MIT
+For details, see /numpy/blob/numpy/random/src/sfc64/LICENSE.md
+
+Name: PHILOX
+Files: /numpy/blob/numpy/random/src/philox/*
+License: D. E. Shaw Research
+For license text, see /numpy/blob/numpy/random/src/philox/LICENSE.md
+
+Name: PCG64
+Files: /numpy/blob/numpy/random/src/pcg64/*
+License: MIT
+For license text, see/numpy/blob/numpy/random/src/pcg64/LICENSE.md
+
+Name: MT19937
+Files: /numpy/blob/numpy/random/src/mt19937/*
+License: MIT
+For license text, see/numpy/blob/numpy/random/src/mt19937/LICENSE.md
+
+Name: Julia
+Files: /numpy/blob/numpy/random/src/distributions/*
+License: Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
+For license text, see/numpy/blob/numpy/random/src/distributions/LICENSE.md
+
+Name: Random
+Files: /numpy/blob/numpy/random/*
+License: dual-licensed under the The University of Illinois/NCSA Open
+Source License (NCSA) and The 3-Clause BSD License
+For license text, see/numpy/blob/numpy/random/LICENSE.md
+
+Name: nympy.core.ma
+Files: /numpy/blob/numpy/ma/*
+License: University of Georgia and Pierre G.F. Gerard-Marchant
+For license text, see /numpy/blob/numpy/ma/LICENSE
+
+--------------- RECURSIVE LICENSE Mentioned in  LICENSES_bundled in
+different directories (list above) --------------------
+Name: SPLITMIX64
+Written in 2015 by Sebastiano Vigna (vigna@acm.org)
+To the extent possible under law, the author has dedicated all copyright
+and related and neighboring rights to this software to the public
+domain worldwide. This software is distributed without any warranty.
+See http://creativecommons.org/publicdomain/zero/1.0/.
+
+Name: SFC64
+(c) 2005-2019 NumPy Developers, Licensed under the 3-clause BSD License.
+The MIT License
+Adapted from a C++ implementation of Chris Doty-Humphrey's SFC PRNG.
+https://gist.github.com/imneme/f1f7821f07cf76504a97f6537c818083
+Copyright (c) 2018 Melissa E. O'Neill
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files
+(the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+Name: PHILOX
+Copyright 2010-2012, D. E. Shaw Research. All rights reserved.
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+   - Redistributions of source code must retain the above
+   copyright notice, this list of conditions, and the following
+   disclaimer.
+   -  Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions, and the following
+   disclaimer in the documentation and/or other materials
+   provided with the distribution.
+    - Neither the name of D. E. Shaw Research nor the names
+    of its contributors may be used to endorse or promote
+    products derived from this software without specific
+    prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGE.
+
+Name: PCG64
+The MIT License
+PCG Random Number Generation for C.
+Copyright 2014 Melissa O'Neill oneill@pcg-random.org
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall
+be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
+OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
+THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: MT19937
+Copyright (c) 2003-2005, Jean-Sebastien Roy (js@jeannot.org)
+The rk_random and rk_seed functions algorithms and the original
+design of the Mersenne Twister RNG:
+Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+   -  Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+   -  Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+    - The names of its contributors may not be used to endorse or
+    promote products derived from this software without specific
+    prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+Original algorithm for the implementation of rk_interval function
+from Richard J. Wagner's implementation of the Mersenne Twister RNG,
+optimised by Magnus Jonsson.
+Constants used in the rk_double implementation by Isaku Wada.
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files
+(the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: Julia
+The ziggurat methods were derived from Julia.
+Copyright (c) 2009-2019: Jeff Bezanson, Stefan Karpinski,
+Viral B. Shah, and other contributors:
+https://github.com/JuliaLang/julia/contributors
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Name: Random
+NCSA Open Source License
+Copyright (c) 2019 Kevin Sheppard. All rights reserved.
+Developed by: Kevin Sheppard (kevin.sheppard@economics.ox.ac.uk,
+kevin.k.sheppard@gmail.com) http://www.kevinsheppard.com
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal with the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimers.
+Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following
+disclaimers in the documentation and/or other materials
+provided with the distribution.
+Neither the names of Kevin Sheppard, nor the names of any
+contributors may be used to endorse or promote products
+derived from this Software without specific prior written permission.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+AND NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS WITH THE SOFTWARE.
+
+Copyright (c) 2019 Kevin Sheppard. All rights reserved.
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+    - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    - Redistributions in binary form must reproduce the above
+    copyright notice, this list of conditions and the following
+    disclaimer in the documentation and/or other materials provided
+    with the distribution.
+   - Neither the name of the copyright holder nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+Components
+Many parts of this module have been derived from original sources,
+often the algorithm's designer. Component licenses are located with
+the component code.
+
+
+nympy.core.ma
+-------------
+Copyright (c) 2006, University of Georgia and Pierre G.F.
+Gerard-Marchant
+All rights reserved.
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+
+     * Redistributions of source code must retain the above
+     copyright
+       notice, this list of conditions and the following
+       disclaimer.
+     * Redistributions in binary form must reproduce the
+     above copyright
+       notice, this list of conditions and the following
+       disclaimer in the documentation and/or other materials
+       provided with the distribution.
+     * Neither the name of the University of Georgia nor the
+        names of its contributors may be used to endorse or
+        promote products derived from this software without
+        specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+importlib_metadata
+------------------
+License: Apache-2.0
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+
+pyyaml
+------
+Copyright (c) 2017-2021 Ingy döt Net
+Copyright (c) 2006-2016 Kirill Simonov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+requests
+--------
+License: Apache-2.0
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+
+python-certifi
+--------------
+This package contains a modified version of ca-bundle.crt:
+
+ca-bundle.crt -- Bundle of CA Root Certificates
+
+This is a bundle of X.509 certificates of public Certificate Authorities
+(CA). These were automatically extracted from Mozilla's root certificates
+file (certdata.txt).  This file can be found in the mozilla source tree:
+https://hg.mozilla.org/mozilla-central/file/tip/security/nss/lib/ckfw/builtins/c
+ertdata.txt
+It contains the certificates in PEM format and therefore
+can be directly used with curl / libcurl / php_curl, or with
+an Apache+mod_ssl webserver for SSL client authentication.
+Just configure this file as the SSLCACertificateFile.#
+
+***** BEGIN LICENSE BLOCK *****
+This Source Code Form is subject to the terms of the Mozilla Public License,
+v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain
+one at http://mozilla.org/MPL/2.0/.
+
+***** END LICENSE BLOCK *****
+A copy of the Mozilla Public License 2.0  license can be found
+in the 'Standard Licenses' section
+
+
+charset_normalizer
+------------------
+Copyright (c) 2019 TAHRI Ahmed R.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+idna
+-----
+Copyright (c) 2013-2021, Kim Davies All rights reserved.
+Redistribution and use in source and binary forms, with or without modification,
+ are
+permitted provided that the following conditions are met:
+    Redistributions of source code must retain the above copyright notice, this
+    list of conditions and the following disclaimer.
+    Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+    Neither the name of the copyright holder nor the names of its contributors
+    may be used to endorse or promote products derived from this software
+    without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIE
+D
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIME
+D.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+urllib3
+-------
+Copyright (c) 2008-2020 Andrey Petrov and contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+sqlalchemy
+----------
+Copyright 2005-2023 SQLAlchemy authors and contributors <see AUTHORS file>.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+greenlet
+--------
+The following files are derived from Stackless Python and are subject to the
+same license as Stackless Python:
+        src/greenlet/slp_platformselect.h
+        files in src/greenlet/platform/ directory
+See LICENSE.PSF and http://www.stackless.com/ for details.
+
+Unless otherwise noted, the files in greenlet have been released under the
+following MIT license:
+Copyright (c) Armin Rigo, Christian Tismer and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+tenacity
+--------
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+   ======================================================================
+   ======================================================================
+
 LibFIDO
 
 Copyright (c) 2018-2021 Yubico AB. All rights reserved.
@@ -2781,6 +4136,775 @@ UPL
    ======================================================================
    ======================================================================
 
+Pandas
+
+Copyright (c) 2008-2011, AQR Capital Management, LLC, Lambda Foundry, Inc.
+and PyData Development Team
+All rights reserved.
+
+Copyright (c) 2011-2025, Open source contributors.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+4th Pary Dependencies
+---------------------
+package_name: numpy
+license_type: BSD License
+license_text:
+Copyright (c) 2005-2024, NumPy Developers.
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+       copyright notice, this list of conditions and the following
+       disclaimer in the documentation and/or other materials provided
+       with the distribution.
+    * Neither the name of the NumPy Developers nor the names of any
+       contributors may be used to endorse or promote products derived
+       from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+LICENSES_bundled.txt
+--------------------
+The NumPy repository and source distributions bundle several libraries that are
+compatibly licensed.  We list these here.
+Name: lapack-lite
+Files: numpy/linalg/lapack_lite/*
+License: BSD-3-Clause
+  Copyright (c) 1992-2013 The University of Tennessee and The University
+                        of Tennessee Research Foundation.  All rights
+                        reserved.
+Copyright (c) 2000-2013 The University of California Berkeley. All
+                        rights reserved.
+Copyright (c) 2006-2013 The University of Colorado Denver.  All rights
+                        reserved.
+$COPYRIGHT$
+Additional copyrights may follow
+$HEADER$
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+- Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer listed
+  in this license in the documentation and/or other materials
+  provided with the distribution.
+- Neither the name of the copyright holders nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+The copyright holders provide no reassurances that the source code
+provided does not infringe any patent, copyright, or any other
+intellectual property rights of third parties.  The copyright holders
+disclaim any liability to any recipient for claims brought against
+recipient by any third party for infringement of that parties
+intellectual property rights.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: dragon4
+Files: numpy/_core/src/multiarray/dragon4.c
+License: MIT
+  /*
+ * Copyright (c) 2014 Ryan Juckett
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+/*
+ * This file contains a modified version of Ryan Juckett's Dragon4
+ * implementation, obtained from https://www.ryanjuckett.com,
+ * which has been ported from C++ to C and which has
+ * modifications specific to printing floats in numpy.
+ *
+ * Ryan Juckett's original code was under the Zlib license; he gave numpy
+ * permission to include it under the MIT license instead.
+ */
+
+Name: libdivide
+Files: numpy/_core/include/numpy/libdivide/*
+License: Zlib
+    zlib License
+  ------------
+  Copyright (C) 2010 - 2019 ridiculous_fish, <libdivide@ridiculousfish.com>
+  Copyright (C) 2016 - 2019 Kim Walisch, <kim.walisch@gmail.com>
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+Note that the following files are vendored in the repository and sdist but not
+installed in built numpy packages:
+
+Name: Meson
+Files: vendored-meson/meson/*
+License: Apache 2.0
+# Copyright 2016 The Meson development team
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+Name: spin
+Files: .spin/cmds.py
+License: BSD-3
+  BSD 3-Clause License
+Copyright (c) 2021--2022, Scientific Python project
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+3. Neither the name of the copyright holder nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+LICENSES_bundled in different directories:
+-----------------------------------------
+The NumPy repository and source distributions bundle several libraries that are
+compatibly licensed.  We list these here.
+
+Name: SPLITMIX64
+Files: /numpy/blob/numpy/random/src/splitmix64/*
+License: Sebastiano Vigna (c) 2005-2019 NumPy Developers, Licensed under the 3-c
+lause BSD License.
+For details, see /numpy/blob/numpy/random/src/splitmix64/LICENSE.md
+
+Name: SFC64
+Files: /numpy/blob/numpy/random/src/sfc64/*
+License: MIT
+For details, see /numpy/blob/numpy/random/src/sfc64/LICENSE.md
+
+Name: PHILOX
+Files: /numpy/blob/numpy/random/src/philox/*
+License: D. E. Shaw Research
+For license text, see /numpy/blob/numpy/random/src/philox/LICENSE.md
+
+Name: PCG64
+Files: /numpy/blob/numpy/random/src/pcg64/*
+License: MIT
+For license text, see/numpy/blob/numpy/random/src/pcg64/LICENSE.md
+
+Name: MT19937
+Files: /numpy/blob/numpy/random/src/mt19937/*
+License: MIT
+For license text, see/numpy/blob/numpy/random/src/mt19937/LICENSE.md
+
+Name: Julia
+Files: /numpy/blob/numpy/random/src/distributions/*
+License: Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
+For license text, see/numpy/blob/numpy/random/src/distributions/LICENSE.md
+
+Name: Random
+Files: /numpy/blob/numpy/random/*
+License: dual-licensed under the The University of Illinois/NCSA
+Open Source License (NCSA) and The 3-Clause BSD License
+For license text, see/numpy/blob/numpy/random/LICENSE.md
+
+Name: numpy.core.ma
+Files: /numpy/blob/numpy/ma/*
+License: University of Georgia and Pierre G.F. Gerard-Marchant
+For license text, see /numpy/blob/numpy/ma/LICENSE
+
+RECURSIVE LICENSE Mentioned in  LICENSES_bundled in different directories (list
+above)
+--------------------------------------------------------------------------------
+------
+
+Name: SPLITMIX64
+Written in 2015 by Sebastiano Vigna (vigna@acm.org)
+To the extent possible under law, the author has dedicated all copyright
+and related and neighboring rights to this software to the public domain worldwi
+de.
+This software is distributed without any warranty.
+See http://creativecommons.org/publicdomain/zero/1.0/.
+
+Name: SFC64
+(c) 2005-2019 NumPy Developers, Licensed under the 3-clause BSD License.
+The MIT License
+Adapted from a C++ implementation of Chris Doty-Humphrey's SFC PRNG.
+https://gist.github.com/imneme/f1f7821f07cf76504a97f6537c818083
+Copyright (c) 2018 Melissa E. O'Neill
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+Name: PHILOX
+Copyright 2010-2012, D. E. Shaw Research. All rights reserved.
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+   - Redistributions of source code must retain the above
+   copyright notice, this list of conditions, and the following disclaimer.
+   -  Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions, and the
+   following disclaimer in the documentation and/or
+   other materials provided with the distribution.
+    - Neither the name of D. E. Shaw Research nor the
+    names of its contributors may be used to endorse
+    or promote products derived from this software
+    without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: PCG64
+The MIT License
+PCG Random Number Generation for C.
+Copyright 2014 Melissa O'Neill oneill@pcg-random.org
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+The above copyright notice and this permission notice shall
+be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
+THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: MT19937
+Copyright (c) 2003-2005, Jean-Sebastien Roy (js@jeannot.org)
+The rk_random and rk_seed functions algorithms and the original
+design of the Mersenne Twister RNG:
+Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+All rights reserved.
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+   -  Redistributions of source code must retain the above
+   copyright notice, this list of conditions and the following
+   disclaimer.
+   -  Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following
+   disclaimer in the documentation and/or other materials
+   provided with the distribution.
+    - The names of its contributors may not be used to endorse
+    or promote products derived from this software without
+    specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (
+INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Original algorithm for the implementation of rk_interval function
+from Richard J. Wagner's implementation of the Mersenne Twister RNG,
+optimised by Magnus Jonsson.
+Constants used in the rk_double implementation by Isaku Wada.
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: Julia
+The ziggurat methods were derived from Julia.
+Copyright (c) 2009-2019: Jeff Bezanson, Stefan Karpinski,
+Viral B. Shah, and other contributors:
+https://github.com/JuliaLang/julia/contributors
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: Random
+NCSA Open Source License
+Copyright (c) 2019 Kevin Sheppard. All rights reserved.
+Developed by: Kevin Sheppard (kevin.sheppard@economics.ox.ac.uk,
+kevin.k.sheppard@gmail.com) http://www.kevinsheppard.com
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal with the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+ - Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimers.
+ - Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimers in the
+ documentation and/or other materials provided with the distribution.
+ - Neither the names of Kevin Sheppard, nor the names of any
+ contributors may be used to endorse or promote products derived
+ from this Software without specific prior written permission.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE SOFTWARE.
+
+3-Clause BSD License
+Copyright (c) 2019 Kevin Sheppard. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+   - Neither the name of the copyright holder nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Components
+Many parts of this module have been derived from original
+sources, often the algorithm's designer. Component licenses are
+located with the component code.
+
+Name: numpy.core.ma
+Copyright (c) 2006, University of Georgia and Pierre G.F. Gerard-Marchant
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+     * Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+     * Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+     * Neither the name of the University of Georgia nor the
+        names of its contributors may be used to endorse or promote products
+        derived from this software without specific prior written permission.
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This distribution of NumPy also bundles the following software:
+Name: OpenBLAS
+Files: numpy/.dylibs/libscipy_openblas*.so
+Description: bundled as a dynamically linked library
+Availability: https://github.com/OpenMathLib/OpenBLAS/
+License: BSD-3-Clause
+  Copyright (c) 2011-2014, The OpenBLAS Project
+  All rights reserved.
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+
+     2. Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in
+        the documentation and/or other materials provided with the
+        distribution.
+     3. Neither the name of the OpenBLAS project nor the names of
+        its contributors may be used to endorse or promote products
+        derived from this software without specific prior written
+        permission.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT
+IAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: LAPACK
+Files: numpy/.dylibs/libscipy_openblas*.so
+Description: bundled in OpenBLAS
+Availability: https://github.com/OpenMathLib/OpenBLAS/
+License: BSD-3-Clause-Attribution
+  Copyright (c) 1992-2013 The University of Tennessee and The University
+                          of Tennessee Research Foundation.  All rights
+                          reserved.
+  Copyright (c) 2000-2013 The University of California Berkeley. All
+                          rights reserved.
+  Copyright (c) 2006-2013 The University of Colorado Denver.  All rights
+                          reserved.
+  $COPYRIGHT$
+  Additional copyrights may follow
+  $HEADER$
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer listed
+    in this license in the documentation and/or other materials
+    provided with the distribution.
+  - Neither the name of the copyright holders nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.
+  The copyright holders provide no reassurances that the source code
+  provided does not infringe any patent, copyright, or any other
+  intellectual property rights of third parties.  The copyright holders
+  disclaim any liability to any recipient for claims brought against
+  recipient by any third party for infringement of that parties
+  intellectual property rights.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: libquadmath
+Files: numpy/.dylibs/libquadmath*.so
+License: LGPL-2.1-or-later
+    GCC Quad-Precision Math Library
+    Copyright (C) 2010-2019 Free Software Foundation, Inc.
+    Written by Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+    This file is part of the libquadmath library.
+    Libquadmath is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+    Libquadmath is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+    https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
+
+python-dateutil
+---------------
+Copyright 2017- Paul Ganssle <paul@ganssle.io>
+Copyright 2017- dateutil contributors (see AUTHORS file)
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+The above license applies to all contributions after 2017-12-01, as well as
+all contributions that have been re-licensed (see AUTHORS file for the list of
+contributors who have re-licensed their code).
+The full text of the Apache License here:
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+A copy of the Apache License v2.0, January 2004 license can be found
+in the 'Standard Licenses' section
+
+dateutil - Extensions to the standard Python datetime module.
+Copyright (c) 2003-2011 - Gustavo Niemeyer <gustavo@niemeyer.net>
+Copyright (c) 2012-2014 - Tomi Pieviläinen <tomi.pievilainen@iki.fi>
+Copyright (c) 2014-2016 - Yaron de Leeuw <me@jarondl.net>
+Copyright (c) 2015-     - Paul Ganssle <paul@ganssle.io>
+Copyright (c) 2015-     - dateutil contributors (see AUTHORS file)
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+    * Neither the name of the copyright holder nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+The above BSD License Applies to all code, even that also covered by Apache 2.0.
+
+six
+---
+Copyright (c) 2010-2020 Benjamin Peterson
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+pytz
+----
+Copyright (c) 2003-2019 Stuart Bishop <stuart@stuartbishop.net>
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+tzdata
+------
+Apache Software License 2.0
+Copyright (c) 2020, Paul Ganssle (Google)
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Vendored dependencies
+=====================
+Pyperclip - BSD license
+-----------------------
+Copyright (c) 2010, Albert Sweigart
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the pyperclip nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY Albert Sweigart "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL Albert Sweigart BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+klib
+----
+The MIT License
+Copyright (c) 2008-     Attractive Chaos <attractor@live.co.uk>
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+SAS7BDAT - MIT License
+----------------------
+Copyright (c) 2015 Jared Hobbs
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+   ======================================================================
+   ======================================================================
+
 Python FIDO
 
 This project, with the exception of the files mentioned below, is licensed
@@ -3092,6 +5216,1520 @@ THE SOFTWARE.
    ======================================================================
    ======================================================================
 
+scikit-learn
+
+Copyright (c) 2007-2024 The scikit-learn developers.
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of the copyright holder nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+scikit-learn has dependencies on following libraries:
+        scikit-learn needs "joblib"
+                "joblib" doesn't have any dependencies
+        scikit-learn needs "numpy"
+                "numpy" has bundled license that are included below
+        scikit-learn needs "scipy"
+                "scipy" needs "numpy"
+                        "numpy" has bundled license that are included below
+        scikit-learn needs "threadpoolctl"
+                "threadpoolctl" doesn't have any dependencies
+
+joblib
+------
+Copyright (c) 2008-2021, The joblib developers.
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of the copyright holder nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+--------------------------------------------------------------------------------
+------------
+numpy
+-----
+Copyright (c) 2005-2024, NumPy Developers.
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+       copyright notice, this list of conditions and the following
+       disclaimer in the documentation and/or other materials provided
+       with the distribution.
+    * Neither the name of the NumPy Developers nor the names of any
+       contributors may be used to endorse or promote products derived
+       from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+LICENSES_bundled.txt
+--------------------
+The NumPy repository and source distributions bundle several libraries that are
+compatibly licensed.  We list these here.
+
+Name: lapack-lite
+Files: numpy/linalg/lapack_lite/*
+License: BSD-3-Clause
+  Copyright (c) 1992-2013 The University of Tennessee and The University
+                        of Tennessee Research Foundation.  All rights
+                        reserved.
+Copyright (c) 2000-2013 The University of California Berkeley. All
+                        rights reserved.
+Copyright (c) 2006-2013 The University of Colorado Denver.  All rights
+                        reserved.
+$COPYRIGHT$
+Additional copyrights may follow
+$HEADER$
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+- Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer listed
+  in this license in the documentation and/or other materials
+  provided with the distribution.
+- Neither the name of the copyright holders nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+The copyright holders provide no reassurances that the source code
+provided does not infringe any patent, copyright, or any other
+intellectual property rights of third parties.  The copyright holders
+disclaim any liability to any recipient for claims brought against
+recipient by any third party for infringement of that parties
+intellectual property rights.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: dragon4
+Files: numpy/_core/src/multiarray/dragon4.c
+License: MIT
+/*
+ * Copyright (c) 2014 Ryan Juckett
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+/*
+ * This file contains a modified version of Ryan Juckett's Dragon4
+ * implementation, obtained from https://www.ryanjuckett.com,
+ * which has been ported from C++ to C and which has
+ * modifications specific to printing floats in numpy.
+ *
+ * Ryan Juckett's original code was under the Zlib license; he gave numpy
+ * permission to include it under the MIT license instead.
+ */
+
+Name: libdivide
+Files: numpy/_core/include/numpy/libdivide/*
+License: Zlib
+    zlib License
+  ------------
+  Copyright (C) 2010 - 2019 ridiculous_fish, <libdivide@ridiculousfish.com>
+  Copyright (C) 2016 - 2019 Kim Walisch, <kim.walisch@gmail.com>
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+Note that the following files are vendored in the repository and sdist but not
+installed in built numpy packages:
+
+Name: Meson
+Files: vendored-meson/meson/*
+License: Apache 2.0
+# Copyright 2016 The Meson development team
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+A copy of the Apache License v2.0, January 2004  license can be found
+in the 'Standard Licenses' section
+
+Name: spin
+Files: .spin/cmds.py
+License: BSD-3
+  BSD 3-Clause License
+Copyright (c) 2021--2022, Scientific Python project
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+3. Neither the name of the copyright holder nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+LICENSES_bundled in different directories:
+-----------------------------------------
+The NumPy repository and source distributions bundle several libraries that are
+compatibly licensed.  We list these here.
+
+Name: SPLITMIX64
+Files: /numpy/blob/numpy/random/src/splitmix64/*
+License: Sebastiano Vigna (c) 2005-2019 NumPy Developers, Licensed under the 3-c
+lause BSD License.
+For details, see /numpy/blob/numpy/random/src/splitmix64/LICENSE.md
+
+Name: SFC64
+Files: /numpy/blob/numpy/random/src/sfc64/*
+License: MIT
+For details, see /numpy/blob/numpy/random/src/sfc64/LICENSE.md
+
+Name: PHILOX
+Files: /numpy/blob/numpy/random/src/philox/*
+License: D. E. Shaw Research
+For license text, see /numpy/blob/numpy/random/src/philox/LICENSE.md
+
+Name: PCG64
+Files: /numpy/blob/numpy/random/src/pcg64/*
+License: MIT
+For license text, see/numpy/blob/numpy/random/src/pcg64/LICENSE.md
+
+Name: MT19937
+Files: /numpy/blob/numpy/random/src/mt19937/*
+License: MIT
+For license text, see/numpy/blob/numpy/random/src/mt19937/LICENSE.md
+
+Name: Julia
+Files: /numpy/blob/numpy/random/src/distributions/*
+License: Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
+For license text, see/numpy/blob/numpy/random/src/distributions/LICENSE.md
+
+Name: Random
+Files: /numpy/blob/numpy/random/*
+License: dual-licensed under the The University of Illinois/NCSA
+Open Source License (NCSA) and The 3-Clause BSD License
+For license text, see/numpy/blob/numpy/random/LICENSE.md
+
+Name: numpy.core.ma
+Files: /numpy/blob/numpy/ma/*
+License: University of Georgia and Pierre G.F. Gerard-Marchant
+For license text, see /numpy/blob/numpy/ma/LICENSE
+
+RECURSIVE LICENSE Mentioned in  LICENSES_bundled in
+different directories (list above)
+--------------------------------------------------------------------------------
+------
+
+Name: SPLITMIX64
+Written in 2015 by Sebastiano Vigna (vigna@acm.org)
+To the extent possible under law, the author has dedicated
+all copyright and related and neighboring rights to this
+software to the public domain worldwide. This software is
+distributed without any warranty.
+See http://creativecommons.org/publicdomain/zero/1.0/.
+
+Name: SFC64
+(c) 2005-2019 NumPy Developers, Licensed under the 3-clause BSD License.
+The MIT License
+Adapted from a C++ implementation of Chris Doty-Humphrey's SFC PRNG.
+https://gist.github.com/imneme/f1f7821f07cf76504a97f6537c818083
+Copyright (c) 2018 Melissa E. O'Neill
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons
+to whom the Software is furnished to do so, subject to the
+following conditions:
+The above copyright notice and this permission notice shall
+be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+Name: PHILOX
+Copyright 2010-2012, D. E. Shaw Research. All rights reserved.
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+   - Redistributions of source code must retain the above
+   copyright notice, this list of conditions, and the
+   following disclaimer.
+   -  Redistributions in binary form must reproduce the
+   above copyright notice, this list of conditions,
+   and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+    - Neither the name of D. E. Shaw Research nor the
+    names of its contributors may be used to endorse or
+    promote products derived from this software without
+    specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: PCG64
+The MIT License
+PCG Random Number Generation for C.
+Copyright 2014 Melissa O'Neill oneill@pcg-random.org
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute,
+sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+The above copyright notice and this permission notice shall
+be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: MT19937
+Copyright (c) 2003-2005, Jean-Sebastien Roy (js@jeannot.org)
+The rk_random and rk_seed functions algorithms and the
+original design of the Mersenne Twister RNG:
+Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji
+Nishimura, All rights reserved.
+Redistribution and use in source and binary forms,
+with or without modification, are permitted provided
+that the following conditions are met:
+   -  Redistributions of source code must retain the
+   above copyright notice, this list of conditions and the following disclaimer.
+   -  Redistributions in binary form must reproduce
+   the above copyright notice, this list of conditions
+   and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+    - The names of its contributors may not be used to
+    endorse or promote products derived from this software
+    without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+OF SUCH DAMAGE.
+
+Original algorithm for the implementation of rk_interval
+function from Richard J. Wagner's implementation of the
+Mersenne Twister RNG, optimised by Magnus Jonsson.
+Constants used in the rk_double implementation by Isaku Wada.
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons
+to whom the Software is furnished to do so, subject to
+the following conditions:
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
+OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
+THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: Julia
+The ziggurat methods were derived from Julia.
+Copyright (c) 2009-2019: Jeff Bezanson, Stefan Karpinski,
+Viral B. Shah, and other contributors:
+https://github.com/JuliaLang/julia/contributors
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall
+be included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
+OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH T
+HE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: Random
+NCSA Open Source License
+Copyright (c) 2019 Kevin Sheppard. All rights reserved.
+Developed by: Kevin Sheppard (kevin.sheppard@economics.ox.ac.uk,
+kevin.k.sheppard@gmail.com) http://www.kevinsheppard.com
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal with the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the
+following conditions:
+Redistributions of source code must retain the
+above copyright notice, this list of conditions
+and the following disclaimers.
+Redistributions in binary form must reproduce the
+above copyright notice, this list of conditions and
+the following disclaimers in the documentation and/or
+other materials provided with the distribution.
+Neither the names of Kevin Sheppard, nor the names of
+any contributors may be used to endorse or promote
+products derived from this Software without specific prior
+written permission.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS
+OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS WITH THE SOFTWARE.
+
+Copyright (c) 2019 Kevin Sheppard. All rights reserved.
+Redistribution and use in source and binary forms, with
+or without modification, are permitted provided that the
+following conditions are met:
+    - Redistributions of source code must retain the above
+    copyright notice, this list of conditions and the
+    following disclaimer.
+    - Redistributions in binary form must reproduce the
+    above copyright notice, this list of conditions and
+    the following disclaimer in the documentation and/or
+    other materials provided with the distribution.
+   - Neither the name of the copyright holder nor the names
+   of its contributors may be used to endorse or promote
+   products derived from this software without specific prior
+   written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+Components
+Many parts of this module have been derived from original sources,
+often the algorithm's designer. Component licenses are located with
+the component code.
+
+Name: numpy.core.ma
+Copyright (c) 2006, University of Georgia and Pierre G.F. Gerard-Marchant
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+     * Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+     * Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+     * Neither the name of the University of Georgia nor the
+        names of its contributors may be used to endorse or promote products
+        derived from this software without specific prior written permission.
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This distribution of NumPy also bundles the following software:
+
+Name: OpenBLAS
+Files: numpy/.dylibs/libscipy_openblas*.so
+Description: bundled as a dynamically linked library
+Availability: https://github.com/OpenMathLib/OpenBLAS/
+License: BSD-3-Clause
+  Copyright (c) 2011-2014, The OpenBLAS Project
+  All rights reserved.
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+     2. Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in
+        the documentation and/or other materials provided with the
+        distribution.
+     3. Neither the name of the OpenBLAS project nor the names of
+        its contributors may be used to endorse or promote products
+        derived from this software without specific prior written
+        permission.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT
+IAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: LAPACK
+Files: numpy/.dylibs/libscipy_openblas*.so
+Description: bundled in OpenBLAS
+Availability: https://github.com/OpenMathLib/OpenBLAS/
+License: BSD-3-Clause-Attribution
+  Copyright (c) 1992-2013 The University of Tennessee and The University
+                          of Tennessee Research Foundation.  All rights
+                          reserved.
+  Copyright (c) 2000-2013 The University of California Berkeley. All
+                          rights reserved.
+  Copyright (c) 2006-2013 The University of Colorado Denver.  All rights
+                          reserved.
+  $COPYRIGHT$
+  Additional copyrights may follow
+  $HEADER$
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer listed
+    in this license in the documentation and/or other materials
+    provided with the distribution.
+  - Neither the name of the copyright holders nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.
+  The copyright holders provide no reassurances that the source code
+  provided does not infringe any patent, copyright, or any other
+  intellectual property rights of third parties.  The copyright holders
+  disclaim any liability to any recipient for claims brought against
+  recipient by any third party for infringement of that parties
+  intellectual property rights.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: libquadmath
+Files: numpy/.dylibs/libquadmath*.so
+License: LGPL-2.1-or-later
+    GCC Quad-Precision Math Library
+    Copyright (C) 2010-2019 Free Software Foundation, Inc.
+    Written by Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+    This file is part of the libquadmath library.
+    Libquadmath is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+    Libquadmath is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+    https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
+
+package_name: scipy
+license_type: BSD License
+license_text:
+Copyright (c) 2001-2002 Enthought, Inc. 2003-2024, SciPy Developers.
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following
+   disclaimer in the documentation and/or other materials provided
+   with the distribution.
+3. Neither the name of the copyright holder nor the names of its
+   contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+The SciPy repository and source distributions bundle a number of libraries that
+are compatibly licensed.  We list these here.
+
+Name: Decorator
+Files: scipy/_lib/decorator.py
+License: 2-clause BSD
+# Copyright (c) 2005-2015, Michele Simionato
+# All rights reserved.
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#   Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+#   Redistributions in bytecode form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in
+#   the documentation and/or other materials provided with the
+#   distribution.
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+# DAMAGE.
+
+Name: fast_matrix_market
+Files: scipy/io/_fast_matrix_market/*
+License: 2-clause BSD
+  Copyright (C) 2020-2023 Adam Lugowski
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the following
+conditions are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following
+disclaimer in the documentation and/or other materials provided
+with the distribution.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: pystreambuf
+Files: scipy/io/_fast_matrix_market/src/pystreambuf.h
+License:
+Copyright (c) 2006, The Regents of the University of
+3-clause BSD
+  // SPDX-License-Identifier: BSD-3-Clause
+/*
+Based on https://gist.github.com/asford/544323a5da7dddad2c9174490eb5ed06
+Original license text
+---------------------
+This component utilizes components derived from cctbx, available at
+http://cci.lbl.gov/cctbx_sources/boost_adaptbx/python_streambuf.h
+*** License agreement ***
+cctbx Copyright (c) 2006, The Regents of the University of
+California, through Lawrence Berkeley National Laboratory (subject to
+receipt of any required approvals from the U.S. Dept. of Energy).  All
+rights reserved.
+Redistribution and use in source and binary forms, with or without
+odification, are permitted provided that the following conditions are met:
+(1) Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+(2) Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+(3) Neither the name of the University of California, Lawrence Berkeley
+National Laboratory, U.S. Dept. of Energy nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+You are under no obligation whatsoever to provide any bug fixes,
+patches, or upgrades to the features, functionality or performance of
+the source code ("Enhancements") to anyone; however, if you choose to
+make your Enhancements available either publicly, or directly to
+Lawrence Berkeley National Laboratory, without imposing a separate
+written license agreement for such Enhancements, then you hereby grant
+the following license: a  non-exclusive, royalty-free perpetual license
+to install, use, modify, prepare derivative works, incorporate into
+other computer software, distribute, and sublicense such enhancements or
+derivative works thereof, in binary and source code form.
+*/
+
+Name: fast_float
+Files: scipy/io/_fast_matrix_market/fast_matrix_market/dependencies/fast_float/*
+License: MIT
+  MIT License
+Copyright (c) 2021 The fast_float authors
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+Name: ryu
+Files: scipy/io/_fast_matrix_market/fast_matrix_market/dependencies/ryu/*
+License: BSL-1.0
+  Boost Software License - Version 1.0 - August 17th, 2003
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+Name: ID
+Files: scipy/linalg/src/id_dist/*
+License: 3-clause BSD
+  Copyright 2014 by P.-G. Martinsson, V. Rokhlin,
+Y. Shkolnisky, and M. Tygert.
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions, and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions, and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+3. None of the names of the copyright holders may be used to endorse
+or promote products derived from this software without specific prior
+written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNERS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: L-BFGS-B
+Files: scipy/optimize/lbfgsb/*
+License:
+Copyright (c) 2004 David M. Cooke <cookedm@physics.mcmaster.ca>
+BSD license
+  From the website for the L-BFGS-B code (from at
+http://www.ece.northwestern.edu/~nocedal/lbfgsb.html):
+"""
+L-BFGS-B is a limited-memory quasi-Newton code for bound-constrained
+optimization, i.e. for problems where the only constraints are of the
+form l<= x <= u.
+"""
+This is a Python wrapper (using F2PY) written by David M. Cooke
+<cookedm@physics.mcmaster.ca> and released as version 0.9 on April 9, 2004.
+The wrapper was slightly modified by Joonas Paalasmaa for the 3.0 version
+in March 2012.
+License of L-BFGS-B (Fortran code)
+==================================
+The version included here (in lbfgsb.f) is 3.0 (released April 25, 2011). It was
+written by Ciyou Zhu, Richard Byrd, and Jorge Nocedal <nocedal@ece.nwu.edu>. It
+carries the following condition for use:
+  """
+  This software is freely available, but we expect that all publications
+  describing work using this software, or all commercial products using it,
+  quote at least one of the references given below. This software is released
+  under the BSD License.
+  References
+    * R. H. Byrd, P. Lu and J. Nocedal. A Limited Memory Algorithm for Bound
+      Constrained Optimization, (1995), SIAM Journal on Scientific and
+      Statistical Computing, 16, 5, pp. 1190-1208.
+    * C. Zhu, R. H. Byrd and J. Nocedal. L-BFGS-B: Algorithm 778: L-BFGS-B,
+      FORTRAN routines for large scale bound constrained optimization (1997),
+      ACM Transactions on Mathematical Software, 23, 4, pp. 550 - 560.
+    * J.L. Morales and J. Nocedal. L-BFGS-B: Remark on Algorithm 778: L-BFGS-B,
+      FORTRAN routines for large scale bound constrained optimization (2011),
+      ACM Transactions on Mathematical Software, 38, 1.
+  """
+The Python wrapper
+==================
+This code uses F2PY (http://cens.ioc.ee/projects/f2py2e/) to generate
+the wrapper around the Fortran code.
+The Python code and wrapper are copyrighted 2004 by David M. Cooke
+<cookedm@physics.mcmaster.ca>.
+Example usage
+=============
+An example of the usage is given at the bottom of the lbfgsb.py file.
+Run it with 'python lbfgsb.py'.
+License for the Python wrapper
+==============================
+Copyright (c) 2004 David M. Cooke <cookedm@physics.mcmaster.ca>
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+Name: LAPJVsp
+Files: scipy/sparse/csgraph/_matching.pyx
+License: 3-clause BSD
+Copyright 1987-, A. Volgenant/Amsterdam School of Economics,
+                 University of Amsterdam
+  Distributed under 3-clause BSD license with permission from
+  University of Amsterdam.
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+  1. Redistributions of source code must retain the above copyright notice,
+     this list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright notice,
+     this list of conditions and the following disclaimer in the documentation
+     and/or other materials provided with the distribution.
+  3. Neither the name of the copyright holder nor the names of its contributors
+     may be used to endorse or promote products derived from this software
+     without specific prior written permission.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+  POSSIBILITY OF SUCH DAMAGE.
+
+
+Name: SuperLU
+Files: scipy/sparse/linalg/dsolve/SuperLU/*
+License: 3-clause BSD
+  Copyright (c) 2003, The Regents of the University of California, through
+Lawrence Berkeley National Laboratory (subject to receipt of any required
+approvals from U.S. Dept. of Energy)
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+(1) Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+(2) Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+(3) Neither the name of Lawrence Berkeley National Laboratory, U.S. Dept. of
+Energy nor the names of its contributors may be used to endorse or promote
+products derived from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: ARPACK
+Files: scipy/sparse/linalg/eigen/arpack/ARPACK/*
+License: 3-clause BSD
+BSD Software License
+Pertains to ARPACK and P_ARPACK
+Copyright (c) 1996-2008 Rice University.
+Developed by D.C. Sorensen, R.B. Lehoucq, C. Yang, and K. Maschhoff.
+All rights reserved.
+Arpack has been renamed to arpack-ng.
+Copyright (c) 2001-2011 - Scilab Enterprises
+Updated by Allan Cornet, Sylvestre Ledru.
+Copyright (c) 2010 - Jordi Gutiérrez Hermoso (Octave patch)
+Copyright (c) 2007 - Sébastien Fabbro (gentoo patch)
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+- Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright
+  notice, this list of conditions and the following disclaimer listed
+  in this license in the documentation and/or other materials
+  provided with the distribution.
+- Neither the name of the copyright holders nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: Qhull
+Files: scipy/spatial/qhull/*
+License: Qhull license (BSD-like)
+                      Qhull, Copyright (c) 1993-2019
+                            C.B. Barber
+                           Arlington, MA
+                               and
+       The National Science and Technology Research Center for
+        Computation and Visualization of Geometric Structures
+                        (The Geometry Center)
+                       University of Minnesota
+                       email: qhull@qhull.org
+This software includes Qhull from C.B. Barber and The Geometry Center.
+Qhull is copyrighted as noted above.  Qhull is free software and may
+be obtained via http from www.qhull.org.  It may be freely copied, modified,
+and redistributed under the following conditions:
+1. All copyright notices must remain intact in all files.
+2. A copy of this text file must be distributed along with any copies
+   of Qhull that you redistribute; this includes copies that you have
+   modified, or copies of programs or other software products that
+   include Qhull.
+3. If you modify Qhull, you must include a notice giving the
+   name of the person performing the modification, the date of
+   modification, and the reason for such modification.
+4. When distributing modified versions of Qhull, or other software
+   products that include Qhull, you must provide notice that the original
+   source code may be obtained as noted above.
+5. There is no warranty or other guarantee of fitness for Qhull, it is
+   provided solely "as is".  Bug reports or fixes may be sent to
+   qhull_bug@qhull.org; the authors may or may not act on them as
+   they desire.
+
+Name: Cephes
+Files: scipy/special/cephes/*
+License: 3-clause BSD
+  Distributed under 3-clause BSD license with permission from the author,
+  see https://lists.debian.org/debian-legal/2004/12/msg00295.html
+  Cephes Math Library Release 2.8:  June, 2000
+  Copyright 1984, 1995, 2000 by Stephen L. Moshier
+  This software is derived from the Cephes Math Library and is
+  incorporated herein by permission of the author.
+  All rights reserved.
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+      * Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in the
+        documentation and/or other materials provided with the distribution.
+      * Neither the name of the <organization> nor the
+        names of its contributors may be used to endorse or promote products
+        derived from this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AN
+D
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: Faddeeva
+Files: scipy/special/Faddeeva.*
+License: MIT
+  Copyright (c) 2012 Massachusetts Institute of Technology
+  Permission is hereby granted, free of charge, to any person obtaining
+  a copy of this software and associated documentation files (the
+  "Software"), to deal in the Software without restriction, including
+  without limitation the rights to use, copy, modify, merge, publish,
+  distribute, sublicense, and/or sell copies of the Software, and to
+  permit persons to whom the Software is furnished to do so, subject to
+  the following conditions:
+  The above copyright notice and this permission notice shall be
+  included in all copies or substantial portions of the Software.
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: qd
+Files: scipy/special/cephes/dd_*.[ch]
+License: modified BSD license ("BSD-LBNL-License.doc")
+  Copyright (c) 2003-2009, The Regents of the University of California,
+  through Lawrence Berkeley National Laboratory (subject to receipt of
+  any required approvals from U.S. Dept. of Energy) All rights reserved.
+  This work was supported by the Director, Office of Science, Division
+  of Mathematical, Information, and Computational Sciences of the
+  U.S. Department of Energy under contract numbers DE-AC03-76SF00098 and
+  DE-AC02-05CH11231.
+  1. Redistribution and use in source and binary forms, with or
+  without modification, are permitted provided that the following
+  conditions are met:
+  (1) Redistributions of source code must retain the copyright
+  notice, this list of conditions and the following disclaimer.
+  (2) Redistributions in binary form must reproduce the copyright
+  notice, this list of conditions and the following disclaimer in
+  the documentation and/or other materials provided with the
+  distribution.
+  (3) Neither the name of the University of California, Lawrence
+  Berkeley National Laboratory, U.S. Dept. of Energy nor the names
+  of its contributors may be used to endorse or promote products
+  derived from this software without specific prior written
+  permission.
+  2. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  3. You are under no obligation whatsoever to provide any bug fixes,
+  patches, or upgrades to the features, functionality or performance of
+  the source code ("Enhancements") to anyone; however, if you choose to
+  make your Enhancements available either publicly, or directly to
+  Lawrence Berkeley National Laboratory, without imposing a separate
+  written license agreement for such Enhancements, then you hereby grant
+  the following license: a non-exclusive, royalty-free perpetual license
+  to install, use, modify, prepare derivative works, incorporate into
+  other computer software, distribute, and sublicense such enhancements
+  or derivative works thereof, in binary and source code form.
+
+Name: pypocketfft
+Files: scipy/fft/_pocketfft/[pocketfft.h, pypocketfft.cxx]
+License: 3-Clause BSD
+  Copyright (C) 2010-2019 Max-Planck-Society
+All rights reserved.
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this
+  list of conditions and the following disclaimer in the documentation and/or
+  other materials provided with the distribution.
+* Neither the name of the copyright holder nor the names of its contributors may
+  be used to endorse or promote products derived from this software without
+  specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: uarray
+Files: scipy/_lib/uarray/*
+License: 3-Clause BSD
+  BSD 3-Clause License
+Copyright (c) 2018, Quansight-Labs
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of the copyright holder nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: ampgo
+Files: benchmarks/benchmarks/go_benchmark_functions/*.py
+License: MIT
+  Functions for testing global optimizers, forked from the AMPGO project,
+  https://code.google.com/archive/p/ampgo
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Name: pybind11
+Files: no source files are included, however pybind11 binary artifacts are
+  included with every binary build of SciPy.
+License:
+  Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>, All rights reserved.
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are met:
+  1. Redistributions of source code must retain the above copyright notice, this
+     list of conditions and the following disclaimer.
+  2. Redistributions in binary form must reproduce the above copyright notice,
+     this list of conditions and the following disclaimer in the documentation
+     and/or other materials provided with the distribution.
+  3. Neither the name of the copyright holder nor the names of its contributors
+     may be used to endorse or promote products derived from this software
+     without specific prior written permission.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AN
+D
+  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: HiGHS
+Files: scipy/optimize/_highs/*
+License: MIT
+  MIT License
+Copyright (c) 2024 HiGHS
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+Name: Boost
+Files: scipy/_lib/boost_math/*
+License: Boost Software License - Version 1.0
+  Boost Software License - Version 1.0 - August 17th, 2003
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+Name: Biasedurn
+Files: scipy/stats/biasedurn/*
+License 3-Clause BSD
+   The C++ code for these distributions without binding to the R project
+are available here:
+https://www.agner.org/random/stocc.zip
+permission to use it in SciPy under the new BSD license.
+By Agner Fog. Technical University of Denmark
+copyright: 2008 - 2014. GNU General Public License
+
+Name: UNU.RAN
+Files: scipy/_lib/unuran/*
+License 3-Clause BSD
+copyright by Renee Touzin
+  Permission was granted on 23 March 2021 by Josef Leydold
+  (josef.leydold@wu.ac.at) and Wolfgang Hoermann (hormannw@bound.edu.tr)
+to use the UNU.RAN code excluding the uniform random number generator
+in src/uniform/mrg31k3p.c (copyright by Renee Touzin)
+under the BSD licence.
+
+Name: NumPy
+Files: scipy/stats/_rcont/[logfactorial.h,logfactorial.c]
+License 3-Clause BSD
+  Copyright (c) 2005-2022, NumPy Developers.
+All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+       copyright notice, this list of conditions and the following
+       disclaimer in the documentation and/or other materials provided
+       with the distribution.
+    * Neither the name of the NumPy Developers nor the names of any
+       contributors may be used to endorse or promote products derived
+       from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: array-api-compat
+Files: scipy/_lib/array-api-compat/*
+License: MIT
+ MIT License
+Copyright (c) 2022 Consortium for Python Data API Standards
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+Name: Tempita
+Files: scipy/_build_utils/tempita/*
+License: MIT
+Copyright (c) 2008 Ian Bicking and Contributors
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+This distribution of SciPy also bundles the following software:
+
+Name: OpenBLAS
+Files: scipy/.dylibs/libopenblas*.so
+Description: bundled as a dynamically linked library
+Availability: https://github.com/OpenMathLib/OpenBLAS/
+License: BSD-3-Clause-Attribution
+  Copyright (c) 2011-2014, The OpenBLAS Project
+  All rights reserved.
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+     2. Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in
+        the documentation and/or other materials provided with the
+        distribution.
+     3. Neither the name of the OpenBLAS project nor the names of
+        its contributors may be used to endorse or promote products
+        derived from this software without specific prior written
+        permission.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT
+IAL
+  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: LAPACK
+Files: scipy/.dylibs/libopenblas*.so
+Description: bundled in OpenBLAS
+Availability: https://github.com/OpenMathLib/OpenBLAS/
+License: BSD-3-Clause-Attribution
+  Copyright (c) 1992-2013 The University of Tennessee and The University
+                          of Tennessee Research Foundation.  All rights
+                          reserved.
+  Copyright (c) 2000-2013 The University of California Berkeley. All
+                          rights reserved.
+  Copyright (c) 2006-2013 The University of Colorado Denver.  All rights
+                          reserved.
+  $COPYRIGHT$
+  Additional copyrights may follow
+  $HEADER$
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+  - Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  - Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer listed
+    in this license in the documentation and/or other materials
+    provided with the distribution.
+  - Neither the name of the copyright holders nor the names of its
+    contributors may be used to endorse or promote products derived from
+    this software without specific prior written permission.
+  The copyright holders provide no reassurances that the source code
+  provided does not infringe any patent, copyright, or any other
+  intellectual property rights of third parties.  The copyright holders
+  disclaim any liability to any recipient for claims brought against
+  recipient by any third party for infringement of that parties
+  intellectual property rights.
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: libquadmath
+Files: scipy/.dylibs/libquadmath*.so
+License: LGPL-2.1-or-later
+    GCC Quad-Precision Math Library
+    Copyright (C) 2010-2019 Free Software Foundation, Inc.
+    Written by Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+    This file is part of the libquadmath library.
+    Libquadmath is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+    Libquadmath is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+    https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
+
+package_name: threadpoolctl
+license_type: BSD License
+license_text:
+Copyright (c) 2019, threadpoolctl contributors
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of copyright holder nor the names of its contributors
+      may be used to endorse or promote products derived from this software
+      without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   ======================================================================
+   ======================================================================
+
 Standard Licenses
 
 Apache License v2.0, January 2004
@@ -3307,6 +6945,232 @@ and limitations under the License.
    ======================================================================
    ======================================================================
 
+Python Software Foundation license, version 2
+
+A. HISTORY OF THE SOFTWARE
+==========================
+Python was created in the early 1990s by Guido van Rossum at Stichting
+Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
+as a successor of a language called ABC.  Guido remains Python's
+principal author, although it includes many contributions from others.
+
+In 1995, Guido continued his work on Python at the Corporation for
+National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
+in Reston, Virginia where he released several versions of the
+software.
+
+In May 2000, Guido and the Python core development team moved to
+BeOpen.com to form the BeOpen PythonLabs team.  In October of the same
+year, the PythonLabs team moved to Digital Creations, which became
+Zope Corporation.  In 2001, the Python Software Foundation (PSF, see
+https://www.python.org/psf/) was formed, a non-profit organization
+created specifically to own Python-related Intellectual Property.
+Zope Corporation was a sponsoring member of the PSF.
+
+All Python releases are Open Source (see http://www.opensource.org for
+the Open Source Definition).  Historically, most, but not all, Python
+releases have also been GPL-compatible; the table below summarizes
+the various releases.
+
+    Release         Derived     Year        Owner       GPL-
+                    from                                compatible? (1)
+
+    0.9.0 thru 1.2              1991-1995   CWI         yes
+    1.3 thru 1.5.2  1.2         1995-1999   CNRI        yes
+    1.6             1.5.2       2000        CNRI        no
+    2.0             1.6         2000        BeOpen.com  no
+    1.6.1           1.6         2001        CNRI        yes (2)
+    2.1             2.0+1.6.1   2001        PSF         no
+    2.0.1           2.0+1.6.1   2001        PSF         yes
+    2.1.1           2.1+2.0.1   2001        PSF         yes
+    2.1.2           2.1.1       2002        PSF         yes
+    2.1.3           2.1.2       2002        PSF         yes
+    2.2 and above   2.1.1       2001-now    PSF         yes
+
+Footnotes:
+
+(1) GPL-compatible doesn't mean that we're distributing Python under
+    the GPL.  All Python licenses, unlike the GPL, let you distribute
+    a modified version without making your changes open source.  The
+    GPL-compatible licenses make it possible to combine Python with
+    other software that is released under the GPL; the others don't.
+
+(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
+    because its license has a choice of law clause.  According to
+    CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
+    is "not incompatible" with the GPL.
+
+Thanks to the many outside volunteers who have worked under Guido's
+direction to make these releases possible.
+
+B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
+===============================================================
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and
+its associated documentation.
+2. Subject to the terms and conditions of this License Agreement, PSF hereby
+grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
+analyze, test, perform and/or display publicly, prepare derivative works,
+distribute, and otherwise use Python alone or in any derivative version,
+provided, however, that PSF's License Agreement and PSF's notice of copyright,
+i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation;
+All Rights Reserved" are retained in Python alone or in any derivative version
+prepared by Licensee.
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python.
+4. PSF is making Python available to Licensee on an "AS IS"
+basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee.  This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+8. By copying, installing or otherwise using Python, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
+-------------------------------------------
+BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
+1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
+office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
+Individual or Organization ("Licensee") accessing and otherwise using
+this software in source or binary form and its associated
+documentation ("the Software").
+2. Subject to the terms and conditions of this BeOpen Python License
+Agreement, BeOpen hereby grants Licensee a non-exclusive,
+royalty-free, world-wide license to reproduce, analyze, test, perform
+and/or display publicly, prepare derivative works, distribute, and
+otherwise use the Software alone or in any derivative version,
+provided, however, that the BeOpen Python License is retained in the
+Software, alone or in any derivative version prepared by Licensee.
+3. BeOpen is making the Software available to Licensee on an "AS IS"
+basis.  BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
+SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
+AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
+DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+5. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+6. This License Agreement shall be governed by and interpreted in all
+respects by the law of the State of California, excluding conflict of
+law provisions.  Nothing in this License Agreement shall be deemed to
+create any relationship of agency, partnership, or joint venture
+between BeOpen and Licensee.  This License Agreement does not grant
+permission to use BeOpen trademarks or trade names in a trademark
+sense to endorse or promote products or services of Licensee, or any
+third party.  As an exception, the "BeOpen Python" logos available at
+http://www.pythonlabs.com/logos.html may be used according to the
+permissions granted on that web page.
+7. By copying, installing or otherwise using the software, Licensee
+agrees to be bound by the terms and conditions of this License
+Agreement.
+
+CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
+---------------------------------------
+1. This LICENSE AGREEMENT is between the Corporation for National
+Research Initiatives, having an office at 1895 Preston White Drive,
+Reston, VA 20191 ("CNRI"), and the Individual or Organization
+("Licensee") accessing and otherwise using Python 1.6.1 software in
+source or binary form and its associated documentation.
+2. Subject to the terms and conditions of this License Agreement, CNRI
+hereby grants Licensee a nonexclusive, royalty-free, world-wide
+license to reproduce, analyze, test, perform and/or display publicly,
+prepare derivative works, distribute, and otherwise use Python 1.6.1
+alone or in any derivative version, provided, however, that CNRI's
+License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
+1995-2001 Corporation for National Research Initiatives; All Rights
+Reserved" are retained in Python 1.6.1 alone or in any derivative
+version prepared by Licensee.  Alternately, in lieu of CNRI's License
+Agreement, Licensee may substitute the following text (omitting the
+quotes): "Python 1.6.1 is made available subject to the terms and
+conditions in CNRI's License Agreement.  This Agreement together with
+Python 1.6.1 may be located on the Internet using the following
+unique, persistent identifier (known as a handle): 1895.22/1013.  This
+Agreement may also be obtained from a proxy server on the Internet
+using the following URL: http://hdl.handle.net/1895.22/1013".
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python 1.6.1 or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of
+the changes made to Python 1.6.1.
+4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
+basis.  CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS.
+5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
+1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+7. This License Agreement shall be governed by the federal
+intellectual property law of the United States, including without
+limitation the federal copyright law, and, to the extent such
+U.S. federal law does not apply, by the law of the Commonwealth of
+Virginia, excluding Virginia's conflict of law provisions.
+Notwithstanding the foregoing, with regard to derivative works based
+on Python 1.6.1 that incorporate non-separable material that was
+previously distributed under the GNU General Public License (GPL), the
+law of the Commonwealth of Virginia shall govern this License
+Agreement only as to issues arising under or with respect to
+Paragraphs 4, 5, and 7 of this License Agreement.  Nothing in this
+License Agreement shall be deemed to create any relationship of
+agency, partnership, or joint venture between CNRI and Licensee.  This
+License Agreement does not grant permission to use CNRI trademarks or
+trade name in a trademark sense to endorse or promote products or
+services of Licensee, or any third party.
+8. By clicking on the "ACCEPT" button where indicated, or by copying,
+installing or otherwise using Python 1.6.1, Licensee agrees to be
+bound by the terms and conditions of this License Agreement.
+
+        ACCEPT
+
+CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
+--------------------------------------------------
+Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
+The Netherlands.  All rights reserved.
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Stichting Mathematisch
+Centrum or CWI not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
+THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
+FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+
 Mozilla Public License 2.0
 
                           MOZILLA PUBLIC LICENSE
diff -pruN 9.4.0-1/debian/changelog 9.5.0-1/debian/changelog
--- 9.4.0-1/debian/changelog	2025-09-20 12:07:43.000000000 +0000
+++ 9.5.0-1/debian/changelog	2025-10-25 23:36:11.000000000 +0000
@@ -1,3 +1,10 @@
+mysql-connector-python (9.5.0-1) unstable; urgency=medium
+
+  * Team upload.
+  * New upstream release.
+
+ -- Daniel Leidert <dleidert@debian.org>  Sun, 26 Oct 2025 01:36:11 +0200
+
 mysql-connector-python (9.4.0-1) unstable; urgency=medium
 
   * Team upload.
diff -pruN 9.4.0-1/mysql-connector-python/MANIFEST.in 9.5.0-1/mysql-connector-python/MANIFEST.in
--- 9.4.0-1/mysql-connector-python/MANIFEST.in	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/MANIFEST.in	2025-10-15 05:27:11.000000000 +0000
@@ -1,3 +1,31 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
 include README.txt
 include README.rst
 include LICENSE.txt
diff -pruN 9.4.0-1/mysql-connector-python/cpydist/bdist_solaris.py 9.5.0-1/mysql-connector-python/cpydist/bdist_solaris.py
--- 9.4.0-1/mysql-connector-python/cpydist/bdist_solaris.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/cpydist/bdist_solaris.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,378 +0,0 @@
-# Copyright (c) 2019, 2024, Oracle and/or its affiliates.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License, version 2.0, as
-# published by the Free Software Foundation.
-#
-# This program is designed to work with certain software (including
-# but not limited to OpenSSL) that is licensed under separate terms,
-# as designated in a particular file or component or in included license
-# documentation. The authors of MySQL hereby grant you an
-# additional permission to link the program and your derivative works
-# with the separately licensed software that they have either included with
-# the program or referenced in the documentation.
-#
-# Without limiting anything contained in the foregoing, this file,
-# which is part of MySQL Connector/Python, is also subject to the
-# Universal FOSS Exception, version 1.0, a copy of which can be found at
-# http://oss.oracle.com/licenses/universal-foss-exception.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU General Public License, version 2.0, for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
-
-"""Implements the Distutils command for creating Solaris packages."""
-
-
-import logging
-import os
-import platform
-import shutil
-import subprocess
-import tarfile
-import time
-
-from pathlib import Path
-
-try:
-    from setuptools.errors import ExecError
-except ImportError:
-    ExecError = Exception
-
-try:
-    from setuptools.logging import set_threshold
-except ImportError:
-    set_threshold = None
-
-from . import COMMON_USER_OPTIONS, VERSION_EXTRA, VERSION_TEXT, BaseCommand
-from .bdist import DistBinary as bdist
-from .utils import write_info_bin, write_info_src
-
-SOLARIS_PKGS = {"pure": os.path.join("cpydist", "data", "solaris")}
-PKGINFO = (
-    'PKG="{pkg}"\n'
-    'NAME="MySQL Connector/Python {ver} {lic}, MySQL driver written in '
-    'Python"\n'
-    'VERSION="{ver}"\n'
-    'ARCH="all"\n'
-    'CLASSES="none"\n'
-    'CATEGORY="application"\n'
-    'VENDOR="ORACLE Corporation"\n'
-    'PSTAMP="{tstamp}"\n'
-    'EMAIL="MySQL Release Engineering <mysql-build@oss.oracle.com>"\n'
-    'BASEDIR="/"\n'
-)
-
-
-class DistSolaris(bdist, BaseCommand):
-    """Create a Solaris distribution."""
-
-    platf_n = "-solaris"
-    platf_v = platform.version().split(".")[0]
-    platf_a = "sparc" if platform.processor() == "sparc" else "x86"
-    description = "create a Solaris distribution"
-    user_options = COMMON_USER_OPTIONS + [
-        ("dist-dir=", "d", "directory to put final built distributions in"),
-        (
-            "platform=",
-            "p",
-            f"name of the platform in resulting file (default '{platf_n}')",
-        ),
-        (
-            "platform-version=",
-            "v",
-            f"version of the platform in resulting file (default '{platf_v}')",
-        ),
-        (
-            "platform-version=",
-            "a",
-            "architecture, i.e. 'sparc' or 'x86' in the resulting file "
-            f"(default '{platf_a}')",
-        ),
-        (
-            "trans",
-            "t",
-            "transform the package into data stream (default 'False')",
-        ),
-    ]
-
-    def initialize_options(self):
-        """Initialize the options."""
-        bdist.initialize_options(self)
-        BaseCommand.initialize_options(self)
-        self.name = self.distribution.get_name()
-        self.version = self.distribution.get_version()
-        self.version_extra = f"-{VERSION_EXTRA}" if VERSION_EXTRA else ""
-        self.keep_temp = None
-        self.create_dmg = False
-        self.dist_dir = None
-        self.started_dir = os.getcwd()
-        self.platform = self.platf_n
-        self.platform_version = self.platf_v
-        self.architecture = self.platf_a
-        self.debug = False
-        self.sun_pkg_name = f"{self.name}-{self.version}{self.version_extra}.pkg"
-        self.dstroot = "dstroot"
-        self.sign = False
-        self.identity = "MySQL Connector/Python"
-        self.trans = False
-
-    def finalize_options(self):
-        """Finalize the options."""
-        bdist.finalize_options(self)
-        BaseCommand.finalize_options(self)
-        self.set_undefined_options("bdist", ("dist_dir", "dist_dir"))
-        if self.debug:
-            self.log.setLevel(logging.DEBUG)
-            if set_threshold:
-                # Set setuptools logging level to DEBUG
-                set_threshold(1)
-
-    def _prepare_pkg_base(self, template_name, data_dir, root=""):
-        """Create and populate the src base directory."""
-        self.log.info("-> _prepare_pkg_base()")
-        self.log.info("  template_name: %s", template_name)
-        self.log.info("  data_dir: %s", data_dir)
-        self.log.info("  root: %s", root)
-
-        # copy and create necessary files
-        sun_dist_name = template_name.format(self.name, self.version)
-        self.sun_pkg_name = f"{sun_dist_name}.pkg"
-        self.log.info("  sun_pkg_name: %s", self.sun_pkg_name)
-
-        sun_path = os.path.join(root, self.dstroot)
-        self.log.info("  sun_path: %s", sun_path)
-        cwd = os.path.join(os.getcwd())
-        self.log.info("Current directory: %s", cwd)
-
-        copy_file_src_dst = []
-
-        # No special folder for GPL or commercial. Files inside the directory
-        # will determine what it is.
-        data_path = os.path.join(
-            sun_path,
-            "usr",
-            "share",
-            template_name.format(self.name, self.version),
-        )
-        self.mkpath(data_path)
-
-        lic = "(GPL)"
-        sun_pkg_info = os.path.join(sun_path, "pkginfo")
-        self.log.info("sun_pkg_info path: %s", sun_pkg_info)
-        with open(sun_pkg_info, "w") as f_pkg_info:
-            f_pkg_info.write(
-                PKGINFO.format(
-                    ver=self.version,
-                    lic=lic,
-                    pkg=self.name,
-                    tstamp=time.ctime(),
-                )
-            )
-            f_pkg_info.close()
-
-        data_path = os.path.join(
-            sun_path,
-            "usr",
-            "share",
-            template_name.format(self.name, self.version),
-        )
-        copy_file_src_dst += [
-            (
-                os.path.join(cwd, "README.txt"),
-                os.path.join(data_path, "README.txt"),
-            ),
-            (
-                os.path.join(cwd, "LICENSE.txt"),
-                os.path.join(data_path, "LICENSE.txt"),
-            ),
-            (
-                os.path.join(cwd, "CHANGES.txt"),
-                os.path.join(data_path, "CHANGES.txt"),
-            ),
-            (
-                os.path.join(cwd, "docs", "INFO_SRC"),
-                os.path.join(data_path, "INFO_SRC"),
-            ),
-            (
-                os.path.join(cwd, "docs", "INFO_BIN"),
-                os.path.join(data_path, "INFO_BIN"),
-            ),
-            (
-                os.path.join(cwd, "README.rst"),
-                os.path.join(data_path, "README.rst"),
-            ),
-            (
-                os.path.join(cwd, "CONTRIBUTING.md"),
-                os.path.join(data_path, "CONTRIBUTING.md"),
-            ),
-            (
-                os.path.join(cwd, "SECURITY.md"),
-                os.path.join(data_path, "SECURITY.md"),
-            ),
-        ]
-
-        for src, dst in copy_file_src_dst:
-            shutil.copyfile(src, dst)
-
-    def _create_pkg(self, template_name, dmg=False, sign=False, root="", identity=""):
-        """Create the Solaris package using the OS dependent commands."""
-        self.log.info("-> _create_pkg()")
-        self.log.info("template_name: %s", template_name)
-        self.log.info("identity: %s", identity)
-
-        sun_dist_name = template_name.format(self.name, self.version)
-        self.sun_pkg_name = f"{sun_dist_name}.pkg"
-        sun_pkg_contents = os.path.join(self.sun_pkg_name, "Contents")
-
-        self.log.info("sun_dist_name: %s", sun_dist_name)
-        self.log.info("sun_pkg_name: %s", self.sun_pkg_name)
-        self.log.info("sun_pkg_contents: %s", sun_pkg_contents)
-
-        sun_path = os.path.join(root, self.dstroot)
-        os.chdir(sun_path)
-        self.log.info("Root directory for Prototype: %s", os.getcwd())
-
-        # Creating a Prototype file, this contains a table of contents of the
-        # Package, that is suitable to be used for the package creation tool.
-        self.log.info(
-            f"Creating Prototype file on {self.dstroot} to describe files to install"
-        )
-
-        prototype_path = "Prototype"
-        proto_tmp = "Prototype_temp"
-
-        with open(proto_tmp, "w") as f_out:
-            cmd = ["pkgproto", "."]
-            pkgp_p = subprocess.Popen(cmd, shell=False, stdout=f_out, stderr=f_out)
-            res = pkgp_p.wait()
-            if res != 0:
-                self.log.error(f"pkgproto command failed with: {res}")
-                raise ExecError(f"pkgproto command failed with: {res}")
-            f_out.flush()
-
-        # log Prototype contents
-        self.log.info("/n>> Prototype_temp contents >>/n")
-        with open(proto_tmp, "r") as f_in:
-            self.log.info(f_in.readlines())
-        self.log.info("/n<< Prototype_temp contents end <</n")
-
-        # Fix Prototype file, insert pkginfo and remove Prototype
-        self.log.info("Fixing folder permissions on Prototype contents")
-        with open(prototype_path, "w") as f_out:
-            with open(proto_tmp, "r") as f_in:
-                # Add pkginfo entry at beginning of the Prototype file
-                f_out.write("i pkginfo\n")
-                f_out.flush()
-                for line in f_in:
-                    if line.startswith("f none Prototype"):
-                        continue
-                    elif line.startswith("f none pkginfo"):
-                        continue
-                    elif line.startswith("d"):
-                        tokeep = line.split(" ")[:-3]
-                        tokeep.extend(["?", "?", "?", "\n"])
-                        f_out.write(" ".join(tokeep))
-                    elif line.startswith("f"):
-                        tokeep = line.split(" ")[:-2]
-                        tokeep.extend(["root", "bin", "\n"])
-                        f_out.write(" ".join(tokeep))
-                    else:
-                        f_out.write(line)
-                f_out.flush()
-
-        # log Prototype contents
-        self.log.info("/n>> Prototype contents >>/n")
-        with open(prototype_path, "r") as f_in:
-            self.log.info(f_in.readlines())
-        self.log.info("/n<< Prototype contents end <</n")
-
-        # Create Solaris package running the package creation command pkgmk
-        self.log.info("Creating package with pkgmk")
-
-        self.log.info("Root directory for pkgmk: %s", os.getcwd())
-        self.spawn(["pkgmk", "-o", "-r", ".", "-d", "../", "-f", prototype_path])
-        os.chdir("../")
-        if self.debug:
-            self.log.info("current directory: %s", os.getcwd())
-
-        # gzip the package folder
-        self.log.info("creating tarball")
-
-        archive_name = f"{self.sun_pkg_name}.tar.gz"
-        self.log.info("Creating tar archive '%s'", archive_name)
-        with tarfile.open(archive_name, "w|gz") as tar:
-            tar.add(self.name)
-
-        if self.trans:
-            self.log.info("Transforming package into data stream with pkgtrans")
-            self.log.info("Current directory: %s", os.getcwd())
-            self.spawn(
-                [
-                    "pkgtrans",
-                    "-s",
-                    os.getcwd(),
-                    os.path.join(os.getcwd(), self.sun_pkg_name),
-                    self.name,
-                ]
-            )
-
-        for base, _, files in os.walk(os.getcwd()):
-            for filename in files:
-                if filename.endswith(".gz") or filename.endswith(".pkg"):
-                    new_name = filename.replace(
-                        f"{self.version}",
-                        f"{self.version}{self.version_extra}{self.platform}"
-                        f"{self.platform_version}-{self.architecture}",
-                    )
-                    file_path = os.path.join(base, filename)
-                    file_dest = os.path.join(self.started_dir, self.dist_dir, new_name)
-                    shutil.copyfile(file_path, file_dest)
-            break
-
-    def run(self):
-        """Run the command."""
-        self.mkpath(self.dist_dir)
-        self.debug = self.verbose
-
-        self.log.info("Generating INFO_SRC and INFO_BIN files")
-        write_info_src(VERSION_TEXT)
-        write_info_bin()
-
-        cmd_build = self.get_finalized_command("build")
-        build_base = os.path.abspath(cmd_build.build_base)
-        metadata_name = self.distribution.metadata.name
-
-        data_dir = SOLARIS_PKGS["pure"]
-        sun_root = os.path.join(build_base, "sun_pure")
-        cmd_install = self.reinitialize_command("install", reinit_subcommands=1)
-        cmd_install.byte_code_only = self.byte_code_only
-        cmd_install.compile = self.byte_code_only
-        cmd_install.distribution.metadata.name = metadata_name
-        cmd_install.with_mysql_capi = None
-        cmd_install.root = os.path.join(sun_root, self.dstroot)
-        cmd_install.ensure_finalized()
-        cmd_install.run()
-
-        template_name = ["{}"]
-        if self.label:
-            template_name.append(f"-{self.label}")
-        template_name.append("-{}")
-
-        self._prepare_pkg_base("".join(template_name), data_dir, root=sun_root)
-        self._create_pkg(
-            "".join(template_name),
-            dmg=self.create_dmg,
-            root=sun_root,
-            sign=self.sign,
-            identity=self.identity,
-        )
-
-        os.chdir(self.started_dir)
-
-        self.remove_temp()
diff -pruN 9.4.0-1/mysql-connector-python/cpydist/data/rpm/mysql-connector-python.spec 9.5.0-1/mysql-connector-python/cpydist/data/rpm/mysql-connector-python.spec
--- 9.4.0-1/mysql-connector-python/cpydist/data/rpm/mysql-connector-python.spec	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/cpydist/data/rpm/mysql-connector-python.spec	2025-10-15 05:27:11.000000000 +0000
@@ -32,17 +32,15 @@
 %define _build_id_links none
 %define current_year %(date +%Y)
 
-%if 0%{?rhel} == 8
-%{!?__python3: %global __python3 /usr/bin/python3.9}
-%{!?python3_pkgversion: %global python3_pkgversion 39}
-%endif
+%global __python3 /usr/bin/python3.12
+%global python3_pkgversion 3.12
 
 %{?mysql_capi: %global with_mysql_capi %{mysql_capi}}
 %{?extra_compile_args: %global extra_compile_args %{extra_compile_args}}
 %{?extra_link_args: %global extra_link_args %{extra_link_args}}
 
 # set version if not defined through 'rpmbuild'
-%{!?version: %global version 9.4.0}
+%{!?version: %global version 9.5.0}
 
 %global with_openssl_opts ""
 
@@ -77,10 +75,9 @@ Source0:       https://cdn.mysql.com/Dow
 
 %{!?with_mysql_capi:BuildRequires: mysql-devel}
 
-%if 0%{?rhel} == 8
+%if 0%{?rhel} < 10
 BuildRequires: python%{python3_pkgversion}-devel
 BuildRequires: python%{python3_pkgversion}-setuptools
-BuildRequires: python%{python3_pkgversion}-rpm-macros
 %endif
 
 %description
@@ -113,8 +110,8 @@ Obsoletes:     mysql-connector-python3-c
 Provides:      mysql-connector-python3-cext = %{version}-%{release}
 %endif
 
-%if 0%{?rhel} == 8
-Requires:      python39
+%if 0%{?rhel} < 10
+Requires:      python3.12
 %endif
 
 %description -n mysql-connector-python3%{?product_suffix}
@@ -177,6 +174,13 @@ cd mysql-connector-python
 %{python3_sitearch}/_mysql_connector.cpython*.so
 
 %changelog
+* Mon Jul 23 2025 Souma Kanti Ghosh <souma.kanti.ghosh@oracle.com> - 9.5.0-1
+- Updated for 9.5.0
+
+* Wed Jul 16 2025 Oscar Pacheco <oscar.p.pacheco@oracle.com> - 9.5.0-1
+- Removed Python 3.9 support
+- Added Python 3.12 support for EL 8 and 9
+
 * Mon Jun 9 2025 Oscar Pacheco <oscar.p.pacheco@oracle.com> - 9.4.0-1
 - Updated for 9.4.0
 
diff -pruN 9.4.0-1/mysql-connector-python/docs/.placeholder 9.5.0-1/mysql-connector-python/docs/.placeholder
--- 9.4.0-1/mysql-connector-python/docs/.placeholder	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/docs/.placeholder	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2023, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/docs/INFO_SRC 9.5.0-1/mysql-connector-python/docs/INFO_SRC
--- 9.4.0-1/mysql-connector-python/docs/INFO_SRC	2025-07-10 16:09:39.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/docs/INFO_SRC	2025-10-15 05:28:33.000000000 +0000
@@ -1,7 +1,7 @@
 MySQL Connector/Python Sources Information
 
-version              :  9.4.0
-branch               :  release/9.4.0
-commit               :  d8319533003dba0e38a88bd9a3f840b39b60d6bc
-short                :  d8319533
-date                 :  2025-07-10 09:04:29 -0600
+version              :  9.5.0
+branch               :  release/9.5.0
+commit               :  a4793835e84d4af29d522889294a03b21ed5ef0f
+short                :  a4793835
+date                 :  2025-10-14 11:08:28 +0100
diff -pruN 9.4.0-1/mysql-connector-python/docs/mysql-connector-python.html 9.5.0-1/mysql-connector-python/docs/mysql-connector-python.html
--- 9.4.0-1/mysql-connector-python/docs/mysql-connector-python.html	2025-07-10 16:09:39.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/docs/mysql-connector-python.html	2025-10-15 05:28:33.000000000 +0000
@@ -21,26 +21,26 @@
           This product may include third-party software, used under
           license. If you are using a Commercial release of MySQL Connector/Python, see
           the
-          <a class="ulink" href="https://downloads.mysql.com/docs/licenses/connector-python-9.3-com-en.pdf" target="_top">MySQL Connector/Python
-          9.3 Commercial License Information User Manual</a> for
+          <a class="ulink" href="https://downloads.mysql.com/docs/licenses/connector-python-9.5-com-en.pdf" target="_top">MySQL Connector/Python
+          9.5 Commercial License Information User Manual</a> for
           licensing information, including licensing information
           relating to third-party software that may be included in this
           Commercial release. If you are using a Community release of
           MySQL Connector/Python, see the
-          <a class="ulink" href="https://downloads.mysql.com/docs/licenses/connector-python-9.3-gpl-en.pdf" target="_top">MySQL Connector/Python
-          9.3 Community License Information User Manual</a> for
+          <a class="ulink" href="https://downloads.mysql.com/docs/licenses/connector-python-9.5-gpl-en.pdf" target="_top">MySQL Connector/Python
+          9.5 Community License Information User Manual</a> for
           licensing information, including licensing information
           relating to third-party software that may be included in this
           Community release.
         </p><p>
         Document generated on:
 
-        2025-07-02
+        2025-10-13
 
 
 
-        (revision: 82696)
-      </p></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#preface">Preface and Legal Notices</a></span></dt><dt><span class="chapter"><a href="#connector-python-introduction">1 Introduction to MySQL Connector/Python</a></span></dt><dt><span class="chapter"><a href="#connector-python-coding">2 Guidelines for Python Developers</a></span></dt><dt><span class="chapter"><a href="#connector-python-versions">3 Connector/Python Versions</a></span></dt><dt><span class="chapter"><a href="#connector-python-installation">4 Connector/Python Installation</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-installation-guide">4.1 Quick Installation Guide</a></span></dt><dt><span class="section"><a href="#differences-between-binary-and-source-distribution">4.2 Differences Between Binary And Source Distributions</a></span></dt><dt><span class="section"><a href="#connector-python-obtaining">4.3 Obtaining Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-installation-binary">4.4 Installing Connector/Python from a Binary Distribution</a></span></dt><dd><dl><dt><span class="section"><a href="#id1842">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-installation-source">4.5 Installing Connector/Python from a Source Distribution</a></span></dt><dt><span class="section"><a href="#connector-python-verification">4.6 Verifying Your Connector/Python Installation</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-examples">5 Connector/Python Coding Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-example-connecting">5.1 Connecting to MySQL Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-ddl">5.2 Creating Tables Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-cursor-transaction">5.3 Inserting Data Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-cursor-select">5.4 Querying Data Using Connector/Python</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-tutorials">6 Connector/Python Tutorials</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-tutorial-cursorbuffered">6.1 Tutorial: Raise Employee's Salary Using a Buffered Cursor</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-connecting">7 Connector/Python Connection Establishment</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-connectargs">7.1 Connector/Python Connection Arguments</a></span></dt><dt><span class="section"><a href="#connector-python-option-files">7.2 Connector/Python Option-File Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-cext">8 The Connector/Python C Extension</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-cext-development">8.1 Application Development with the Connector/Python C Extension</a></span></dt><dt><span class="section"><a href="#connector-python-cext-module">8.2 The _mysql_connector C Extension Module</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-other">9 Connector/Python Other Topics</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-logging">9.1 Connector/Python Logging</a></span></dt><dt><span class="section"><a href="#connector-python-opentelemetry">9.2 Telemetry Support</a></span></dt><dt><span class="section"><a href="#connector-python-multi">9.3 Executing Multiple Statements</a></span></dt><dt><span class="section"><a href="#connector-python-asyncio">9.4 Asynchronous Connectivity</a></span></dt><dt><span class="section"><a href="#connector-python-connection-pooling">9.5 Connector/Python Connection Pooling</a></span></dt><dt><span class="section"><a href="#connector-python-django-backend">9.6 Connector/Python Django Back End</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-reference">10 Connector/Python API Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysql-connector">10.1 mysql.connector Module</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysql-connector-connect">10.1.1 mysql.connector.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-apilevel">10.1.2 mysql.connector.apilevel Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-paramstyle">10.1.3 mysql.connector.paramstyle Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-threadsafety">10.1.4 mysql.connector.threadsafety Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version">10.1.5 mysql.connector.__version__ Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version-info">10.1.6 mysql.connector.__version_info__ Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlconnection">10.2 connection.MySQLConnection Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlconnection-constructor">10.2.1 connection.MySQLConnection() Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-close">10.2.2 MySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-commit">10.2.3 MySQLConnection.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-config">10.2.4 MySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connect">10.2.5 MySQLConnection.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cursor">10.2.6 MySQLConnection.cursor() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-change-user">10.2.7 MySQLConnection.cmd_change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-debug">10.2.8 MySQLConnection.cmd_debug() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-init-db">10.2.9 MySQLConnection.cmd_init_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-ping">10.2.10 MySQLConnection.cmd_ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-info">10.2.11 MySQLConnection.cmd_process_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-kill">10.2.12 MySQLConnection.cmd_process_kill() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query">10.2.13 MySQLConnection.cmd_query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query-iter">10.2.14 MySQLConnection.cmd_query_iter() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-quit">10.2.15 MySQLConnection.cmd_quit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-refresh">10.2.16 MySQLConnection.cmd_refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-reset-connection">10.2.17 MySQLConnection.cmd_reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-shutdown">10.2.18 MySQLConnection.cmd_shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-statistics">10.2.19 MySQLConnection.cmd_statistics() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-disconnect">10.2.20 MySQLConnection.disconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-row">10.2.21 MySQLConnection.get_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-rows">10.2.22 MySQLConnection.get_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-info">10.2.23 MySQLConnection.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-version">10.2.24 MySQLConnection.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-is-connected">10.2.25 MySQLConnection.is_connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-isset-client-flag">10.2.26 MySQLConnection.isset_client_flag() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-ping">10.2.27 MySQLConnection.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reconnect">10.2.28 MySQLConnection.reconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reset-session">10.2.29 MySQLConnection.reset_session() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-rollback">10.2.30 MySQLConnection.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-charset-collation">10.2.31 MySQLConnection.set_charset_collation() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-client-flags">10.2.32 MySQLConnection.set_client_flags() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-shutdown">10.2.33 MySQLConnection.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-start-transaction">10.2.34 MySQLConnection.start_transaction() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-autocommit">10.2.35 MySQLConnection.autocommit Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unread-results">10.2.36 MySQLConnection.unread_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-can-consume-results">10.2.37 MySQLConnection.can_consume_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-charset">10.2.38 MySQLConnection.charset Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-client-flags">10.2.39 MySQLConnection.client_flags Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-collation">10.2.40 MySQLConnection.collation Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connected">10.2.41 MySQLConnection.connected Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connection-id">10.2.42 MySQLConnection.connection_id Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-converter-class">10.2.43 MySQLConnection.converter-class Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-database">10.2.44 MySQLConnection.database Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-warnings">10.2.45 MySQLConnection.get_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-in-transaction">10.2.46 MySQLConnection.in_transaction Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-raise-on-warnings">10.2.47 MySQLConnection.raise_on_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-host">10.2.48 MySQLConnection.server_host Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-info">10.2.49 MySQLConnection.server_info Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-port">10.2.50 MySQLConnection.server_port Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-version">10.2.51 MySQLConnection.server_version Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-sql-mode">10.2.52 MySQLConnection.sql_mode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-time-zone">10.2.53 MySQLConnection.time_zone Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-use-unicode">10.2.54 MySQLConnection.use_unicode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unix-socket">10.2.55 MySQLConnection.unix_socket Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-user">10.2.56 MySQLConnection.user Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool">10.3 pooling.MySQLConnectionPool Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-constructor">10.3.1 pooling.MySQLConnectionPool Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-add-connection">10.3.2 MySQLConnectionPool.add_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-get-connection">10.3.3 MySQLConnectionPool.get_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-set-config">10.3.4 MySQLConnectionPool.set_config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-pool-name">10.3.5 MySQLConnectionPool.pool_name Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection">10.4 pooling.PooledMySQLConnection Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-constructor">10.4.1 pooling.PooledMySQLConnection Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-close">10.4.2 PooledMySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-config">10.4.3 PooledMySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-pool-name">10.4.4 PooledMySQLConnection.pool_name Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlcursor">10.5 cursor.MySQLCursor Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlcursor-constructor">10.5.1 cursor.MySQLCursor Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-add-attribute">10.5.2 MySQLCursor.add_attribute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-clear-attributes">10.5.3 MySQLCursor.clear_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-get-attributes">10.5.4 MySQLCursor.get_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-callproc">10.5.5 MySQLCursor.callproc() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-close">10.5.6 MySQLCursor.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-execute">10.5.7 MySQLCursor.execute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-executemany">10.5.8 MySQLCursor.executemany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchall">10.5.9 MySQLCursor.fetchall() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchmany">10.5.10 MySQLCursor.fetchmany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchone">10.5.11 MySQLCursor.fetchone() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-nextset">10.5.12 MySQLCursor.nextset() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchsets">10.5.13 MySQLCursor.fetchsets() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchwarnings">10.5.14 MySQLCursor.fetchwarnings() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-stored-results">10.5.15 MySQLCursor.stored_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-column-names">10.5.16 MySQLCursor.column_names Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-description">10.5.17 MySQLCursor.description Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-warnings">10.5.18 MySQLCursor.warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-lastrowid">10.5.19 MySQLCursor.lastrowid Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-rowcount">10.5.20 MySQLCursor.rowcount Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-statement">10.5.21 MySQLCursor.statement Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-with-rows">10.5.22 MySQLCursor.with_rows Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-cursor-subclasses">10.6 Subclasses cursor.MySQLCursor</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffered">10.6.1 cursor.MySQLCursorBuffered Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorraw">10.6.2 cursor.MySQLCursorRaw Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursordict">10.6.3 cursor.MySQLCursorDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffereddict">10.6.4 cursor.MySQLCursorBufferedDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorprepared">10.6.5 cursor.MySQLCursorPrepared Class</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-clientflag">10.7 constants.ClientFlag Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-fieldtype">10.8 constants.FieldType Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-sqlmode">10.9 constants.SQLMode Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-characterset">10.10 constants.CharacterSet Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-refreshoption">10.11 constants.RefreshOption Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors">10.12 Errors and Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-errorcode">10.12.1 errorcode Module</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-error">10.12.2 errors.Error Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-dataerror">10.12.3 errors.DataError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-databaseerror">10.12.4 errors.DatabaseError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-integrityerror">10.12.5 errors.IntegrityError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-interfaceerror">10.12.6 errors.InterfaceError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-internalerror">10.12.7 errors.InternalError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-notsupportederror">10.12.8 errors.NotSupportedError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-operationalerror">10.12.9 errors.OperationalError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-poolerror">10.12.10 errors.PoolError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-programmingerror">10.12.11 errors.ProgrammingError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-warning">10.12.12 errors.Warning Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-custom-error-exception">10.12.13 errors.custom_error_exception() Function</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#connector-python-cext-reference">11 Connector/Python C Extension API Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-cext-mysql-connector">11.1 _mysql_connector Module</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-mysql">11.2 _mysql_connector.MySQL() Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-affected-rows">11.3 _mysql_connector.MySQL.affected_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-autocommit">11.4 _mysql_connector.MySQL.autocommit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-buffered">11.5 _mysql_connector.MySQL.buffered() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-change-user">11.6 _mysql_connector.MySQL.change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-character-set-name">11.7 _mysql_connector.MySQL.character_set_name() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-close">11.8 _mysql_connector.MySQL.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-commit">11.9 _mysql_connector.MySQL.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-connect">11.10 _mysql_connector.MySQL.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-connected">11.11 _mysql_connector.MySQL.connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-consume-result">11.12 _mysql_connector.MySQL.consume_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-convert-to-mysql">11.13 _mysql_connector.MySQL.convert_to_mysql() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-escape-string">11.14 _mysql_connector.MySQL.escape_string() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-fetch-fields">11.15 _mysql_connector.MySQL.fetch_fields() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-fetch-row">11.16 _mysql_connector.MySQL.fetch_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-field-count">11.17 _mysql_connector.MySQL.field_count() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-free-result">11.18 _mysql_connector.MySQL.free_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-character-set-info">11.19 _mysql_connector.MySQL.get_character_set_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-client-info">11.20 _mysql_connector.MySQL.get_client_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-client-version">11.21 _mysql_connector.MySQL.get_client_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-host-info">11.22 _mysql_connector.MySQL.get_host_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-proto-info">11.23 _mysql_connector.MySQL.get_proto_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-server-info">11.24 _mysql_connector.MySQL.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-server-version">11.25 _mysql_connector.MySQL.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-ssl-cipher">11.26 _mysql_connector.MySQL.get_ssl_cipher() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-hex-string">11.27 _mysql_connector.MySQL.hex_string() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-insert-id">11.28 _mysql_connector.MySQL.insert_id() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-more-results">11.29 _mysql_connector.MySQL.more_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-next-result">11.30 _mysql_connector.MySQL.next_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-num-fields">11.31 _mysql_connector.MySQL.num_fields() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-num-rows">11.32 _mysql_connector.MySQL.num_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-ping">11.33 _mysql_connector.MySQL.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-query">11.34 _mysql_connector.MySQL.query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-raw">11.35 _mysql_connector.MySQL.raw() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-refresh">11.36 _mysql_connector.MySQL.refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-reset-connection">11.37 _mysql_connector.MySQL.reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-rollback">11.38 _mysql_connector.MySQL.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-select-db">11.39 _mysql_connector.MySQL.select_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-set-character-set">11.40 _mysql_connector.MySQL.set_character_set() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-shutdown">11.41 _mysql_connector.MySQL.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-stat">11.42 _mysql_connector.MySQL.stat() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-thread-id">11.43 _mysql_connector.MySQL.thread_id() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-use-unicode">11.44 _mysql_connector.MySQL.use_unicode() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-warning-count">11.45 _mysql_connector.MySQL.warning_count() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-have-result-set">11.46 _mysql_connector.MySQL.have_result_set Property</a></span></dt></dl></dd><dt><span class="index"><a href="#ix01">Index</a></span></dt></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="preface"></a>Preface and Legal Notices</h1></div></div></div><p>
+        (revision: 83739)
+      </p></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#preface">Preface and Legal Notices</a></span></dt><dt><span class="chapter"><a href="#connector-python-introduction">1 Introduction to MySQL Connector/Python</a></span></dt><dt><span class="chapter"><a href="#connector-python-coding">2 Guidelines for Python Developers</a></span></dt><dt><span class="chapter"><a href="#connector-python-versions">3 Connector/Python Versions</a></span></dt><dt><span class="chapter"><a href="#connector-python-installation">4 Connector/Python Installation</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-installation-guide">4.1 Quick Installation Guide</a></span></dt><dt><span class="section"><a href="#differences-between-binary-and-source-distribution">4.2 Differences Between Binary And Source Distributions</a></span></dt><dt><span class="section"><a href="#connector-python-obtaining">4.3 Obtaining Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-installation-binary">4.4 Installing Connector/Python from a Binary Distribution</a></span></dt><dd><dl><dt><span class="section"><a href="#id1847">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-installation-source">4.5 Installing Connector/Python from a Source Distribution</a></span></dt><dt><span class="section"><a href="#connector-python-verification">4.6 Verifying Your Connector/Python Installation</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-examples">5 Connector/Python Coding Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-example-connecting">5.1 Connecting to MySQL Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-ddl">5.2 Creating Tables Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-cursor-transaction">5.3 Inserting Data Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-cursor-select">5.4 Querying Data Using Connector/Python</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-tutorials">6 Connector/Python Tutorials</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-tutorial-cursorbuffered">6.1 Tutorial: Raise Employee's Salary Using a Buffered Cursor</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-connecting">7 Connector/Python Connection Establishment</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-connectargs">7.1 Connector/Python Connection Arguments</a></span></dt><dt><span class="section"><a href="#connector-python-option-files">7.2 Connector/Python Option-File Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-cext">8 The Connector/Python C Extension</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-cext-development">8.1 Application Development with the Connector/Python C Extension</a></span></dt><dt><span class="section"><a href="#connector-python-cext-module">8.2 The _mysql_connector C Extension Module</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-other">9 Connector/Python Other Topics</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-logging">9.1 Connector/Python Logging</a></span></dt><dt><span class="section"><a href="#connector-python-opentelemetry">9.2 Telemetry Support</a></span></dt><dt><span class="section"><a href="#connector-python-multi">9.3 Executing Multiple Statements</a></span></dt><dt><span class="section"><a href="#connector-python-asyncio">9.4 Asynchronous Connectivity</a></span></dt><dt><span class="section"><a href="#connector-python-connection-pooling">9.5 Connector/Python Connection Pooling</a></span></dt><dt><span class="section"><a href="#connector-python-django-backend">9.6 Connector/Python Django Back End</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-reference">10 Connector/Python API Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysql-connector">10.1 mysql.connector Module</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysql-connector-connect">10.1.1 mysql.connector.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-apilevel">10.1.2 mysql.connector.apilevel Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-paramstyle">10.1.3 mysql.connector.paramstyle Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-threadsafety">10.1.4 mysql.connector.threadsafety Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version">10.1.5 mysql.connector.__version__ Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version-info">10.1.6 mysql.connector.__version_info__ Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlconnection">10.2 connection.MySQLConnection Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlconnection-constructor">10.2.1 connection.MySQLConnection() Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-close">10.2.2 MySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-commit">10.2.3 MySQLConnection.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-config">10.2.4 MySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connect">10.2.5 MySQLConnection.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cursor">10.2.6 MySQLConnection.cursor() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-change-user">10.2.7 MySQLConnection.cmd_change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-debug">10.2.8 MySQLConnection.cmd_debug() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-init-db">10.2.9 MySQLConnection.cmd_init_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-ping">10.2.10 MySQLConnection.cmd_ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-info">10.2.11 MySQLConnection.cmd_process_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-kill">10.2.12 MySQLConnection.cmd_process_kill() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query">10.2.13 MySQLConnection.cmd_query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query-iter">10.2.14 MySQLConnection.cmd_query_iter() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-quit">10.2.15 MySQLConnection.cmd_quit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-refresh">10.2.16 MySQLConnection.cmd_refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-reset-connection">10.2.17 MySQLConnection.cmd_reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-shutdown">10.2.18 MySQLConnection.cmd_shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-statistics">10.2.19 MySQLConnection.cmd_statistics() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-disconnect">10.2.20 MySQLConnection.disconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-row">10.2.21 MySQLConnection.get_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-rows">10.2.22 MySQLConnection.get_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-info">10.2.23 MySQLConnection.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-version">10.2.24 MySQLConnection.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-is-connected">10.2.25 MySQLConnection.is_connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-isset-client-flag">10.2.26 MySQLConnection.isset_client_flag() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-ping">10.2.27 MySQLConnection.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reconnect">10.2.28 MySQLConnection.reconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reset-session">10.2.29 MySQLConnection.reset_session() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-rollback">10.2.30 MySQLConnection.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-charset-collation">10.2.31 MySQLConnection.set_charset_collation() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-client-flags">10.2.32 MySQLConnection.set_client_flags() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-shutdown">10.2.33 MySQLConnection.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-start-transaction">10.2.34 MySQLConnection.start_transaction() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-autocommit">10.2.35 MySQLConnection.autocommit Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unread-results">10.2.36 MySQLConnection.unread_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-can-consume-results">10.2.37 MySQLConnection.can_consume_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-charset">10.2.38 MySQLConnection.charset Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-client-flags">10.2.39 MySQLConnection.client_flags Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-collation">10.2.40 MySQLConnection.collation Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connected">10.2.41 MySQLConnection.connected Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connection-id">10.2.42 MySQLConnection.connection_id Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-converter-class">10.2.43 MySQLConnection.converter-class Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-database">10.2.44 MySQLConnection.database Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-warnings">10.2.45 MySQLConnection.get_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-in-transaction">10.2.46 MySQLConnection.in_transaction Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-raise-on-warnings">10.2.47 MySQLConnection.raise_on_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-host">10.2.48 MySQLConnection.server_host Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-info">10.2.49 MySQLConnection.server_info Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-port">10.2.50 MySQLConnection.server_port Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-version">10.2.51 MySQLConnection.server_version Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-sql-mode">10.2.52 MySQLConnection.sql_mode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-time-zone">10.2.53 MySQLConnection.time_zone Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-use-unicode">10.2.54 MySQLConnection.use_unicode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unix-socket">10.2.55 MySQLConnection.unix_socket Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-user">10.2.56 MySQLConnection.user Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool">10.3 pooling.MySQLConnectionPool Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-constructor">10.3.1 pooling.MySQLConnectionPool Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-add-connection">10.3.2 MySQLConnectionPool.add_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-get-connection">10.3.3 MySQLConnectionPool.get_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-set-config">10.3.4 MySQLConnectionPool.set_config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-pool-name">10.3.5 MySQLConnectionPool.pool_name Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection">10.4 pooling.PooledMySQLConnection Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-constructor">10.4.1 pooling.PooledMySQLConnection Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-close">10.4.2 PooledMySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-config">10.4.3 PooledMySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-pool-name">10.4.4 PooledMySQLConnection.pool_name Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlcursor">10.5 cursor.MySQLCursor Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlcursor-constructor">10.5.1 cursor.MySQLCursor Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-add-attribute">10.5.2 MySQLCursor.add_attribute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-clear-attributes">10.5.3 MySQLCursor.clear_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-get-attributes">10.5.4 MySQLCursor.get_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-callproc">10.5.5 MySQLCursor.callproc() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-close">10.5.6 MySQLCursor.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-execute">10.5.7 MySQLCursor.execute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-executemany">10.5.8 MySQLCursor.executemany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchall">10.5.9 MySQLCursor.fetchall() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchmany">10.5.10 MySQLCursor.fetchmany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchone">10.5.11 MySQLCursor.fetchone() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-nextset">10.5.12 MySQLCursor.nextset() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchsets">10.5.13 MySQLCursor.fetchsets() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchwarnings">10.5.14 MySQLCursor.fetchwarnings() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-stored-results">10.5.15 MySQLCursor.stored_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-column-names">10.5.16 MySQLCursor.column_names Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-description">10.5.17 MySQLCursor.description Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-warnings">10.5.18 MySQLCursor.warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-lastrowid">10.5.19 MySQLCursor.lastrowid Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-rowcount">10.5.20 MySQLCursor.rowcount Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-statement">10.5.21 MySQLCursor.statement Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-with-rows">10.5.22 MySQLCursor.with_rows Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-cursor-subclasses">10.6 Subclasses cursor.MySQLCursor</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffered">10.6.1 cursor.MySQLCursorBuffered Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorraw">10.6.2 cursor.MySQLCursorRaw Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursordict">10.6.3 cursor.MySQLCursorDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffereddict">10.6.4 cursor.MySQLCursorBufferedDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorprepared">10.6.5 cursor.MySQLCursorPrepared Class</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-clientflag">10.7 constants.ClientFlag Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-fieldtype">10.8 constants.FieldType Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-sqlmode">10.9 constants.SQLMode Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-characterset">10.10 constants.CharacterSet Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-refreshoption">10.11 constants.RefreshOption Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors">10.12 Errors and Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-errorcode">10.12.1 errorcode Module</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-error">10.12.2 errors.Error Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-dataerror">10.12.3 errors.DataError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-databaseerror">10.12.4 errors.DatabaseError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-integrityerror">10.12.5 errors.IntegrityError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-interfaceerror">10.12.6 errors.InterfaceError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-internalerror">10.12.7 errors.InternalError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-notsupportederror">10.12.8 errors.NotSupportedError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-operationalerror">10.12.9 errors.OperationalError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-poolerror">10.12.10 errors.PoolError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-programmingerror">10.12.11 errors.ProgrammingError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-warning">10.12.12 errors.Warning Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-custom-error-exception">10.12.13 errors.custom_error_exception() Function</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#connector-python-cext-reference">11 Connector/Python C Extension API Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-cext-mysql-connector">11.1 _mysql_connector Module</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-mysql">11.2 _mysql_connector.MySQL() Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-affected-rows">11.3 _mysql_connector.MySQL.affected_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-autocommit">11.4 _mysql_connector.MySQL.autocommit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-buffered">11.5 _mysql_connector.MySQL.buffered() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-change-user">11.6 _mysql_connector.MySQL.change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-character-set-name">11.7 _mysql_connector.MySQL.character_set_name() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-close">11.8 _mysql_connector.MySQL.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-commit">11.9 _mysql_connector.MySQL.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-connect">11.10 _mysql_connector.MySQL.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-connected">11.11 _mysql_connector.MySQL.connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-consume-result">11.12 _mysql_connector.MySQL.consume_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-convert-to-mysql">11.13 _mysql_connector.MySQL.convert_to_mysql() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-escape-string">11.14 _mysql_connector.MySQL.escape_string() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-fetch-fields">11.15 _mysql_connector.MySQL.fetch_fields() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-fetch-row">11.16 _mysql_connector.MySQL.fetch_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-field-count">11.17 _mysql_connector.MySQL.field_count() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-free-result">11.18 _mysql_connector.MySQL.free_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-character-set-info">11.19 _mysql_connector.MySQL.get_character_set_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-client-info">11.20 _mysql_connector.MySQL.get_client_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-client-version">11.21 _mysql_connector.MySQL.get_client_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-host-info">11.22 _mysql_connector.MySQL.get_host_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-proto-info">11.23 _mysql_connector.MySQL.get_proto_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-server-info">11.24 _mysql_connector.MySQL.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-server-version">11.25 _mysql_connector.MySQL.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-ssl-cipher">11.26 _mysql_connector.MySQL.get_ssl_cipher() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-hex-string">11.27 _mysql_connector.MySQL.hex_string() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-insert-id">11.28 _mysql_connector.MySQL.insert_id() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-more-results">11.29 _mysql_connector.MySQL.more_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-next-result">11.30 _mysql_connector.MySQL.next_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-num-fields">11.31 _mysql_connector.MySQL.num_fields() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-num-rows">11.32 _mysql_connector.MySQL.num_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-ping">11.33 _mysql_connector.MySQL.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-query">11.34 _mysql_connector.MySQL.query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-raw">11.35 _mysql_connector.MySQL.raw() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-refresh">11.36 _mysql_connector.MySQL.refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-reset-connection">11.37 _mysql_connector.MySQL.reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-rollback">11.38 _mysql_connector.MySQL.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-select-db">11.39 _mysql_connector.MySQL.select_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-set-character-set">11.40 _mysql_connector.MySQL.set_character_set() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-shutdown">11.41 _mysql_connector.MySQL.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-stat">11.42 _mysql_connector.MySQL.stat() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-thread-id">11.43 _mysql_connector.MySQL.thread_id() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-use-unicode">11.44 _mysql_connector.MySQL.use_unicode() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-warning-count">11.45 _mysql_connector.MySQL.warning_count() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-have-result-set">11.46 _mysql_connector.MySQL.have_result_set Property</a></span></dt></dl></dd><dt><span class="index"><a href="#ix01">Index</a></span></dt></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="preface"></a>Preface and Legal Notices</h1></div></div></div><p>
       This manual describes how to install, configure, and develop
       database applications using MySQL Connector/Python, the Python driver for
       communicating with MySQL servers.
@@ -389,7 +389,12 @@ row.'''
           <th scope="col">Python Versions</th>
           <th scope="col">Connector Status</th>
         </tr></thead><tbody><tr>
-          <th scope="row">9.1.0 and later</th>
+          <th scope="row">9.5.0 and later</th>
+          <td>8.0 and later</td>
+          <td>3.14, 3.13*, 3.12, 3.11, 3.10</td>
+          <td>General Availability</td>
+        </tr><tr>
+          <th scope="row">9.10 - 9.4.0</th>
           <td>8.0 and later</td>
           <td>3.13*, 3.12, 3.11, 3.10, 3.9</td>
           <td>General Availability</td>
@@ -399,7 +404,7 @@ row.'''
           <td>3.12, 3.11, 3.10, 3.9, 3.8</td>
           <td>General Availability</td>
         </tr><tr>
-          <th scope="row">8.1.0 through 8.3.0</th>
+          <th scope="row">8.1.0 - 8.3.0</th>
           <td>5.7 and later</td>
           <td>3.12 (8.2.0+), 3.11, 3.10, 3.9, 3.8</td>
           <td>General Availability</td>
@@ -448,8 +453,7 @@ row.'''
           depends on the Python Standard Library.
         </p><p>
           The X DevAPI variant of the connector requires Python
-          Protobuf. The required version is 4.25.3, and was &gt;=
-          4.21.1,&lt;= 4.21.12 before Connector/Python 9.0.0.
+          Protobuf. The required version is 5.29.4.
         </p></li><li class="listitem"><p>
           As a C Extension that interfaces with the MySQL C client
           library. This implementation of the protocol is dependent on
@@ -473,7 +477,7 @@ row.'''
           <span class="bold"><strong>Source Distribution</strong></span>: A
           distribution that contains only source files and is generally
           platform independent.
-        </p></li></ul></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="connector-python-installation"></a>Chapter 4 Connector/Python Installation</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#quick-installation-guide">4.1 Quick Installation Guide</a></span></dt><dt><span class="section"><a href="#differences-between-binary-and-source-distribution">4.2 Differences Between Binary And Source Distributions</a></span></dt><dt><span class="section"><a href="#connector-python-obtaining">4.3 Obtaining Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-installation-binary">4.4 Installing Connector/Python from a Binary Distribution</a></span></dt><dd><dl><dt><span class="section"><a href="#id1842">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-installation-source">4.5 Installing Connector/Python from a Source Distribution</a></span></dt><dt><span class="section"><a href="#connector-python-verification">4.6 Verifying Your Connector/Python Installation</a></span></dt></dl></div><p>
+        </p></li></ul></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="connector-python-installation"></a>Chapter 4 Connector/Python Installation</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#quick-installation-guide">4.1 Quick Installation Guide</a></span></dt><dt><span class="section"><a href="#differences-between-binary-and-source-distribution">4.2 Differences Between Binary And Source Distributions</a></span></dt><dt><span class="section"><a href="#connector-python-obtaining">4.3 Obtaining Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-installation-binary">4.4 Installing Connector/Python from a Binary Distribution</a></span></dt><dd><dl><dt><span class="section"><a href="#id1847">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-installation-source">4.5 Installing Connector/Python from a Source Distribution</a></span></dt><dt><span class="section"><a href="#connector-python-verification">4.6 Verifying Your Connector/Python Installation</a></span></dt></dl></div><p>
     Connector/Python runs on any platform where Python is installed. Make sure
     Python is installed on your platform:
   </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
@@ -566,7 +570,7 @@ $ pip install mysqlx-connector-python
       Linux) are no longer available from Oracle since Connector/Python
       9.0.0. Using <code class="literal">pip</code> to manage Connector/Python on
       those Linux distributions is recommended.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-installation-binary"></a>4.4 Installing Connector/Python from a Binary Distribution</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#id1842">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-installation-binary"></a>4.4 Installing Connector/Python from a Binary Distribution</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#id1847">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></div><p>
       Connector/Python includes the classic and X DevAPI connector APIs,
       which are installed separately. Each can be installed by a binary
       distribution.
@@ -576,7 +580,7 @@ $ pip install mysqlx-connector-python
       and the
       <a class="ulink" href="https://packaging.python.org/en/latest/discussions/package-formats/#what-is-a-wheel" target="_top">wheel</a>
       package formats.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="id1842"></a>4.4.1 Installing Connector/Python with pip</h3></div></div></div><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="id1847"></a>4.4.1 Installing Connector/Python with pip</h3></div></div></div><p>
         Installation via <span class="command"><strong>pip</strong></span> is supported on Windows,
         macOS, and Linux platforms.
       </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
@@ -603,7 +607,7 @@ $&gt; pip install mysqlx-connector-pytho
         can install it as follows:
       </p><pre data-lang="css" class="programlisting"># Installation
 $ pip install <em class="replaceable"><code>/path/to/wheel/&lt;wheel package name&gt;</code></em>.whl
-</pre><h4><a name="id1854"></a>Installation of Optional Features</h4><p>
+</pre><h4><a name="id1859"></a>Installation of Optional Features</h4><p>
         Installation from wheels allow you to install optional
         dependencies to enable certain features with Connector/Python.
         For example:
@@ -656,7 +660,7 @@ $ pip install mysqlx-connector-python[co
           the MySQL Yum Repository</a> and
           <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html#yum-install-components" target="_top">Installing
           Additional MySQL Products and Components with Yum</a>).
-        </p><h5><a name="id1893"></a>Prerequisites</h5><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+        </p><h5><a name="id1898"></a>Prerequisites</h5><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
               <span class="emphasis"><em>For installing X DevAPI only:</em></span>Because
               the required <code class="literal">python3-protobuf</code> RPM
               package is not available for Python 3.8 on the RedHat
@@ -671,7 +675,7 @@ $ pip install mysqlx-connector-python[co
               which is the default authentication method for MySQL 8.0
               and later. Install it using the Yum repository
             </p><pre class="programlisting">  $ sudo yum install mysql-community-client-plugins
-</pre></li></ul></div><h5><a name="id1905"></a>Installation</h5><p>
+</pre></li></ul></div><h5><a name="id1910"></a>Installation</h5><p>
           Use the following commands to install Connector/Python:
         </p><pre class="programlisting">$ sudo yum install mysql-connector-python
 
@@ -687,7 +691,7 @@ $ sudo yum install mysqlx-connector-pyth
           packages before installing them. To learn more, see
           <a class="ulink" href="https://dev.mysql.com/doc/refman/8.4/en/verifying-package-integrity.html" target="_top">Verifying
           Package Integrity Using MD5 Checksums or GnuPG</a>.
-        </p><h5><a name="id1915"></a>Prerequisites</h5><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+        </p><h5><a name="id1920"></a>Prerequisites</h5><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
               <span class="emphasis"><em>For installing X DevAPI only:</em></span>Because
               the required <code class="literal">python3-protobuf</code> RPM
               package is not available for Python 3.8 on the RedHat
@@ -701,27 +705,19 @@ $ sudo yum install mysqlx-connector-pyth
               methods like <code class="literal">caching_sha2_password</code>,
               which is the default authentication method for MySQL 8.0
               and later.
-            </p><pre class="programlisting">  $ rpm -i mysql-community-client-plugins-<em class="replaceable"><code>ver</code></em>.<em class="replaceable"><code>distro</code></em>.<em class="replaceable"><code>architecture</code></em>.rpm</pre></li></ul></div><h5><a name="id1930"></a>Installation</h5><p>
+            </p><pre class="programlisting">  $ rpm -i mysql-community-client-plugins-<em class="replaceable"><code>ver</code></em>.<em class="replaceable"><code>distro</code></em>.<em class="replaceable"><code>architecture</code></em>.rpm</pre></li></ul></div><h5><a name="id1935"></a>Installation</h5><p>
           To install Connector/Python using the downloaded RPM packages:
         </p><pre class="programlisting">$ rpm -i mysql-connector-python-<em class="replaceable"><code>ver</code></em>.<em class="replaceable"><code>distro</code></em>.<em class="replaceable"><code>architecture</code></em>.rpm
 
 # Optionally, install X DevAPI
 $ rpm -i mysqlx-connector-python-<em class="replaceable"><code>ver</code></em>.<em class="replaceable"><code>distro</code></em>.<em class="replaceable"><code>architecture</code></em>.rpm
 </pre></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-installation-source"></a>4.5 Installing Connector/Python from a Source Distribution</h2></div></div></div><p>
-      Connector/Python source distributions are platform independent. Source
-      distributions are packaged in two formats:
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
-          <code class="literal">Zip</code> archive format
-          (<code class="filename">.zip</code> file)
-        </p></li><li class="listitem"><p>
-          Compressed <code class="literal">tar</code> archive format
-          (<code class="filename">.tar.gz</code> file)
-        </p></li></ul></div><p>
-      Either of the two packaging formats can be used on any platforms,
-      but <code class="literal">Zip</code> archives are more commonly used on
-      Windows systems and <code class="literal">tar</code> archives on Unix and
-      Unix-like systems.
-    </p><h3><a name="id1954"></a>Prerequisites for Compiling Connector/Python with the C Extension</h3><p>
+      The Connector/Python source distribution is platform independent, and is
+      packaged in the compressed <code class="literal">tar</code> archive format
+      (<code class="filename">.tar.gz</code> file). See
+      <a class="link" href="#connector-python-obtaining" title="4.3 Obtaining Connector/Python">Obtaining
+      Connector/Python</a>) on how to download them.
+    </p><h3><a name="id1950"></a>Prerequisites for Compiling Connector/Python with the C Extension</h3><p>
       Source distributions include the C Extension that interfaces with
       the MySQL C client library. <span class="emphasis"><em>You can build the
       distribution with or without support for this
@@ -746,9 +742,8 @@ $ rpm -i mysqlx-connector-python-<em cla
           <a class="ulink" href="https://dev.mysql.com/downloads/" target="_top">MySQL
           download site</a>).
         </p></li><li class="listitem"><p>
-          <span class="emphasis"><em>For installing the X DevAPI interface
-          only:</em></span> Protobuf C++ (version 4.25.3 or later).
-        </p></li></ul></div><h3><a name="id1977"></a>Installing Connector/Python from Source Code Using
+          <span class="emphasis"><em>For installing the X DevAPI interface only:</em></span> Protobuf C++ (version
+            <code class="code">5.29.4</code>). </p></li></ul></div><h3><a name="id1974"></a>Installing Connector/Python from Source Code Using
       <code class="literal">pip</code></h3><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
         We recommend leveraging
         <a class="ulink" href="https://docs.python.org/3/tutorial/venv.html" target="_top">python
@@ -756,120 +751,70 @@ $ rpm -i mysqlx-connector-python-<em cla
         installation instead of installing packages directly into the
         Python system environment.
       </p></div><p>
-      To install Connector/Python from a <code class="literal">Zip</code> archive,
-      download its latest version from the Connector/Python download
-      site (see
-      <a class="link" href="#connector-python-obtaining" title="4.3 Obtaining Connector/Python">Obtaining
-      Connector/Python</a>) and follow the steps described below.
-    </p><p>
       <span class="bold"><strong>For installing the classic
       interface:</strong></span>
     </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
-          Unpack the Zip archive in a directory of your preference.
+          Download the latest version of the <code class="literal">sdist</code> of
+          Connector/Python for the classic MySQL protocol, whose name is
+          in the format of
+          <code class="code">mysql_connector_python-x.y.z.tar.gz</code>.
         </p></li><li class="listitem"><p>
-          Start a terminal and change location to the folder where you
-          unpacked the Zip archive. The unpacked folder should have a
-          layout similar to the following:
-        </p><pre data-lang="bash" class="programlisting">    mysql-connector-python-<em class="replaceable"><code>x.y.z</code></em>-src
-    ├── CHANGES.txt
-    ├── CONTRIBUTING.md
-    ├── LICENSE.txt
-    ├── mysql-connector-python
-    │   ...
-    │   ├── setup.py
-    │   ...
-    ├── pyproject.toml
-    ├── README.rst
-    ├── README.txt
-    └── SECURITY.md
-</pre></li><li class="listitem"><p>
-          Go into the
-          <code class="literal">mysql-connector-python-<em class="replaceable"><code>x.y.z</code></em>-src</code>
-          folder, and perform the installation using this command:
-        </p><pre class="programlisting"> pip install ./mysql-connector-python
-</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Warning</div><p>
-            DO NOT use <code class="literal">mysql-connector-python</code> instead
-            of <code class="literal">./mysql-connector-python</code>, as the
-            former will install the WHEEL package from the PyPI
-            repository, and the latter will install the local WHEEL that
-            is compiled from the source code.
-          </p></div><p>
-          <span class="emphasis"><em>To include the C Extension</em></span>, use these
-          steps instead to provide the path to the installation
-          directory of MySQL Server (or to the folder where the server
-          binaries are located) with the <code class="literal">MYSQL_CAPI</code>
-          system variable before running the installation step. On Linux
+          <span class="emphasis"><em>Optional: To include the C Extension</em></span>, use
+          these steps to provide the path to the installation directory
+          of MySQL Server (or to the folder where the server binaries
+          are located) with the <code class="literal">MYSQL_CAPI</code> system
+          variable before running the installation step. On Linux
           platforms:
         </p><pre class="programlisting"> $ export MYSQL_CAPI=&lt;path to server binaries&gt; 
- $ pip install ./mysql-connector-python
 </pre><p>
           On Windows platforms:
-        </p><p>
-</p><pre class="programlisting"> &gt; $env:MYSQL_CAPI=&lt;path to server binaries&gt;
- &gt; pip install ./mysql-connector-python
+        </p><pre class="programlisting"> &gt; $env:MYSQL_CAPI=&lt;path to server binaries&gt;
 </pre><p>
-
           </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
               It is not required that the server is actually installed
               on the system; for compiling the C-extension, the presence
               of libraries are sufficient
             </p></div><p>
-        </p></li></ol></div><p>
-      <span class="bold"><strong>For installing X DevAPI:</strong></span>
-    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
-          Unpack the Zip archive in a directory of your preference.
         </p></li><li class="listitem"><p>
-          Start a terminal and change location to the folder where you
-          unpacked the Zip archive. The unpacked folder should have a
-          layout similar to the following:
-        </p><pre data-lang="bash" class="programlisting">  mysql-connector-python-<em class="replaceable"><code>x.y.z</code></em>-src
-    ├── CHANGES.txt
-    ├── CONTRIBUTING.md
-    ├── LICENSE.txt
-    ├── mysqlx-connector-python
-    │   ...
-    │   ├── setup.py
-    │   ...
-    ├── pyproject.toml
-    ├── README.rst
-    ├── README.txt
-    └── SECURITY.md
-</pre></li><li class="listitem"><p>
-          Go into the
-          <code class="literal">mysql-connector-python-x.y.z-src</code> folder,
-          and perform the installation using this commands:
-        </p><pre class="programlisting"> pip install ./mysqlx-connector-python
-</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Warning</div><p>
-            DO NOT use <code class="literal">mysqlx-connector-python</code>
-            instead of <code class="literal">./mysqlx-connector-python</code>, as
-            the former will install the WHEEL package from the PyPI
+          Perform the installation using this command:
+        </p><pre class="programlisting"> pip install ./mysql_connector_python-x.y.z.tar.gz</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Warning</div><p>
+            DO NOT use <code class="literal">mysql-connector-python</code> instead
+            of <code class="literal">./mysql_connector_python-x.y.z.tar.gz</code>,
+            as the former will install the WHEEL package from the PyPI
             repository, and the latter will install the local WHEEL that
             is compiled from the source code.
-          </p></div><p>
-          <span class="emphasis"><em>To include the Protobuf C-Extension,</em></span> use
-          these commands instead on Linux platforms to provide the path
-          to the folder where the protobuf binaries are located by the
-          <code class="literal">MYSQLXPB_PROTOBUF</code> system variable before
-          the installation step:
+          </p></div></li></ol></div><p>
+      <span class="bold"><strong>For installing X DevAPI:</strong></span>
+    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+          Download the latest version of the <code class="literal">sdist</code> of
+          Connector/Python for the MySQL X Protocol, whose name is in
+          the format of
+          <code class="code">mysqlx_connector_python-x.y.z.tar.gz</code>.
+        </p></li><li class="listitem"><p>
+          <span class="emphasis"><em>Optional: To include the Protobuf
+          C-Extension,</em></span> use these commands on Linux platforms
+          to provide the paths to the Protobuf folders by the
+          <code class="literal">MYSQLXPB_*</code> system variables before the
+          installation step:
         </p><pre class="programlisting"> $ export MYSQLXPB_PROTOBUF=<em class="replaceable"><code>&lt;path to protobuf binaries&gt;</code></em>
  $ export MYSQLXPB_PROTOBUF_INCLUDE_DIR="${MYSQLXPB_PROTOBUF}/include"
  $ export MYSQLXPB_PROTOBUF_LIB_DIR="${MYSQLXPB_PROTOBUF}/lib"
  $ export MYSQLXPB_PROTOC="${MYSQLXPB_PROTOBUF}/bin/protoc"
- $ pip install ./mysqlx-connector-python
 </pre><p>
-          Or these commands on Windows platforms to provide the path to
-          the folder where the protobuf binaries are located by the
-          <code class="literal">PROTOBUF</code> system variable before the
-          installation step:
+          Or these commands on Windows platforms:
         </p><pre class="programlisting"> &gt; $env:PROTOBUF=<em class="replaceable"><code>&lt;path to protobuf binaries&gt;</code></em>
  &gt; $env:PROTOBUF_INCLUDE_DIR=$env:PROTOBUF+"\include"
  &gt; $env:PROTOBUF_LIB_DIR=$env:PROTOBUF+"\lib"
  &gt; $env:PROTOC=$env:PROTOBUF+"\bin\protoc.exe"
- &gt; pip install ./mysqlx-connector-python
-</pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
-            It is not required that the server is actually installed on
-            the system; for compiling the C-extension, the presence of
-            libraries are sufficient
+</pre></li><li class="listitem"><p>
+          Perform the installation using this command:
+        </p><pre class="programlisting"> pip install ./mysqlx_connector_python-x.y.z.tar.gz</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Warning</div><p>
+            DO NOT use <code class="literal">mysqlx-connector-python</code>
+            instead of
+            <code class="literal">./mysqlx_connector_python-x.y.z.tar.gz</code>,
+            as the former will install the WHEEL package from the PyPI
+            repository, and the latter will install the local WHEEL that
+            is compiled from the source code.
           </p></div></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-verification"></a>4.6 Verifying Your Connector/Python Installation</h2></div></div></div><h3><a name="verify-installation-pip"></a>Verifying Installations by <code class="literal">pip</code></h3><p>
       To verify that a Connector/Python package has been installed
       successfully using <code class="literal">pip</code>, use the following
@@ -1064,7 +1009,7 @@ else:
 
     print("Could not connect")
 
-</pre><h3><a name="id2103"></a>Using the Connector/Python Python or C Extension</h3><p>
+</pre><h3><a name="id2089"></a>Using the Connector/Python Python or C Extension</h3><p>
       Connector/Python offers two implementations: a pure Python interface and a C
       extension that uses the MySQL C client library (see
       <a class="xref" href="#connector-python-cext" title="Chapter 8 The Connector/Python C Extension">Chapter 8, <i>The Connector/Python C Extension</i></a>). This can be configured
@@ -1878,7 +1823,7 @@ cnx = MySQLConnection(user='joe', databa
           <td>Must be a string in the form "primary/instance@realm" such as
             "ldap/ldapauth@MYSQL.COM" where "@realm" is optional. Added
             in 8.0.23.</td>
-        </tr></tbody></table></div></div><br class="table-break"><h3><a name="id2638"></a>MySQL Authentication Options</h3><p>
+        </tr></tbody></table></div></div><br class="table-break"><h3><a name="id2624"></a>MySQL Authentication Options</h3><p>
       Authentication with MySQL typically uses a
       <code class="literal">username</code> and <code class="literal">password</code>.
     </p><p>
@@ -2020,7 +1965,7 @@ async def test():
             await cur.execute("SELECT @@version")
             print(await cur.fetchall())
 asyncio.run(test())
-</pre><h3><a name="id2691"></a>Character Encoding</h3><p>
+</pre><h3><a name="id2677"></a>Character Encoding</h3><p>
       By default, strings coming from MySQL are returned as Python
       Unicode literals. To change this behavior, set
       <code class="literal">use_unicode</code> to <code class="literal">False</code>. You
@@ -2032,7 +1977,7 @@ asyncio.run(test())
       SQL statement directly. Similar to the <code class="literal">charset</code>
       property, you can set the <code class="literal">collation</code> for the
       current MySQL session.
-    </p><h3><a name="id2701"></a>Transactions</h3><p>
+    </p><h3><a name="id2687"></a>Transactions</h3><p>
       The <code class="literal">autocommit</code> value defaults to
       <code class="literal">False</code>, so transactions are not automatically
       committed. Call the <code class="literal">commit()</code> method of the
@@ -2042,19 +1987,19 @@ asyncio.run(test())
       write operations, it is best to leave the
       <code class="literal">autocommit</code> configuration option turned off when
       using <code class="literal">InnoDB</code> or other transactional tables.
-    </p><h3><a name="id2709"></a>Time Zones</h3><p>
+    </p><h3><a name="id2695"></a>Time Zones</h3><p>
       The time zone can be set per connection using the
       <code class="literal">time_zone</code> argument. This is useful, for
       example, if the MySQL server is set to UTC and
       <code class="literal">TIMESTAMP</code> values should be returned by MySQL
       converted to the <code class="literal">PST</code> time zone.
-    </p><h3><a name="id2714"></a>SQL Modes</h3><p>
+    </p><h3><a name="id2700"></a>SQL Modes</h3><p>
       MySQL supports so-called SQL Modes. which change the behavior of
       the server globally or per connection. For example, to have
       warnings raised as errors, set <code class="literal">sql_mode</code> to
       <code class="literal">TRADITIONAL</code>. For more information, see
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html" target="_top">Server SQL Modes</a>.
-    </p><h3><a name="id2719"></a>Troubleshooting and Error Handling</h3><p>
+    </p><h3><a name="id2705"></a>Troubleshooting and Error Handling</h3><p>
       Warnings generated by queries are fetched automatically when
       <code class="literal">get_warnings</code> is set to <code class="literal">True</code>.
       You can also immediately raise an exception by setting
@@ -2064,7 +2009,7 @@ asyncio.run(test())
     </p><p>
       To set a timeout value for connections, use
       <code class="literal">connection_timeout</code>.
-    </p><h3><a name="id2728"></a>Enabling and Disabling Features Using Client Flags</h3><p>
+    </p><h3><a name="id2714"></a>Enabling and Disabling Features Using Client Flags</h3><p>
       MySQL uses <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-real-connect.html" target="_top">client flags</a>
       to enable or disable features. Using the
       <code class="literal">client_flags</code> argument, you have control of what
@@ -2081,7 +2026,7 @@ print '\n'.join(ClientFlag.get_full_info
       <code class="literal">LONG_FLAG</code>:
     </p><pre data-lang="python" class="programlisting">flags = [ClientFlag.FOUND_ROWS, -ClientFlag.LONG_FLAG]
 mysql.connector.connect(client_flags=flags)
-</pre><h3><a name="id2739"></a>Result Set Handling</h3><p>
+</pre><h3><a name="id2725"></a>Result Set Handling</h3><p>
       By default, MySQL Connector/Python does not buffer or prefetch results. This means
       that after a query is executed, your program is responsible for
       fetching the data. This avoids excessive memory use when queries
@@ -2098,7 +2043,7 @@ mysql.connector.connect(client_flags=fla
       <code class="literal">True</code>. The result is that all results are read,
       which for large result sets can be slow. (In this case, it might
       be preferable to close and reopen the connection.)
-    </p><h3><a name="id2747"></a>Type Conversions</h3><p>
+    </p><h3><a name="id2733"></a>Type Conversions</h3><p>
       By default, MySQL types in result sets are converted automatically
       to Python types. For example, a <code class="literal">DATETIME</code> column
       value becomes a
@@ -2106,7 +2051,7 @@ mysql.connector.connect(client_flags=fla
       object. To disable conversion, set the <code class="literal">raw</code>
       option to <code class="literal">True</code>. You might do this to get better
       performance or perform different types of conversion yourself.
-    </p><h3><a name="id2753"></a>Connecting through SSL</h3><p>
+    </p><h3><a name="id2739"></a>Connecting through SSL</h3><p>
       Using SSL connections is possible when your
       <a class="ulink" href="http://docs.python.org/library/ssl.html" target="_top">Python
       installation supports SSL</a>, that is, when it is compiled
@@ -2153,7 +2098,7 @@ cur.execute("SHOW STATUS LIKE 'Ssl_ciphe
 print(cur.fetchone())
 cur.close()
 cnx.close()
-</pre><h3><a name="id2772"></a>Connection Pooling</h3><p>
+</pre><h3><a name="id2758"></a>Connection Pooling</h3><p>
       With either the <code class="literal">pool_name</code> or
       <code class="literal">pool_size</code> argument present, Connector/Python creates the
       new pool. If the <code class="literal">pool_name</code> argument is not
@@ -2171,19 +2116,19 @@ cnx.close()
     </p><p>
       For additional information about connection pooling, see
       <a class="xref" href="#connector-python-connection-pooling" title="9.5 Connector/Python Connection Pooling">Section 9.5, “Connector/Python Connection Pooling”</a>.
-    </p><h3><a name="id2787"></a>Protocol Compression</h3><p>
+    </p><h3><a name="id2773"></a>Protocol Compression</h3><p>
       The boolean <code class="literal">compress</code> argument indicates whether
       to use the compressed client/server protocol (default
       <code class="literal">False</code>). This provides an easier alternative to
       setting the <code class="literal">ClientFlag.COMPRESS</code> flag. This
       argument is available as of Connector/Python 1.1.2.
-    </p><h3><a name="id2792"></a>Converter Class</h3><p>
+    </p><h3><a name="id2778"></a>Converter Class</h3><p>
       The <code class="literal">converter_class</code> argument takes a class and
       sets it when configuring the connection. An
       <code class="literal">AttributeError</code> is raised if the custom
       converter class is not a subclass of
       <code class="literal">conversion.MySQLConverterBase</code>.
-    </p><h3><a name="id2797"></a>Server Failover</h3><p>
+    </p><h3><a name="id2783"></a>Server Failover</h3><p>
       The <code class="literal">connect()</code> method accepts a
       <code class="literal">failover</code> argument that provides information to
       use for server failover in the event of connection failures. The
@@ -2196,7 +2141,7 @@ cnx.close()
       <code class="literal">database</code>, <code class="literal">pool_name</code>,
       <code class="literal">pool_size</code>. This failover option was added in
       Connector/Python 1.2.1.
-    </p><h3><a name="id2809"></a>Option File Support</h3><p>
+    </p><h3><a name="id2795"></a>Option File Support</h3><p>
       As of Connector/Python 2.0.0, option files are supported using two options
       for <code class="literal">connect()</code>:
     </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
@@ -2216,7 +2161,7 @@ cnx.close()
         </p></li></ul></div><p>
       For more information, see
       <a class="xref" href="#connector-python-option-files" title="7.2 Connector/Python Option-File Support">Section 7.2, “Connector/Python Option-File Support”</a>.
-    </p><h3><a name="id2824"></a>LOAD DATA LOCAL INFILE</h3><p>
+    </p><h3><a name="id2810"></a>LOAD DATA LOCAL INFILE</h3><p>
       Prior to Connector/Python 2.0.0, to enable use of
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/load-data.html" target="_top"><code class="literal">LOAD DATA LOCAL
       INFILE</code></a>, clients had to explicitly set the
@@ -2225,7 +2170,7 @@ cnx.close()
       <code class="literal">allow_local_infile</code> connection option can be set
       to <code class="literal">False</code> at connect time (the default is
       <code class="literal">True</code>).
-    </p><h3><a name="id2832"></a>Compatibility with Other Connection Interfaces</h3><p>
+    </p><h3><a name="id2818"></a>Compatibility with Other Connection Interfaces</h3><p>
       <code class="literal">passwd</code>, <code class="literal">db</code> and
       <code class="literal">connect_timeout</code> are valid for compatibility
       with other MySQL interfaces and are respectively the same as
@@ -2234,7 +2179,7 @@ cnx.close()
       Data source name syntax or <code class="literal">dsn</code> is not used; if
       specified, it raises a <code class="literal">NotSupportedError</code>
       exception.
-    </p><h3><a name="id2842"></a>Client/Server Protocol Implementation</h3><p>
+    </p><h3><a name="id2828"></a>Client/Server Protocol Implementation</h3><p>
       Connector/Python can use a pure Python interface to MySQL, or a C Extension
       that uses the MySQL C client library. The
       <code class="literal">use_pure</code>
@@ -2341,7 +2286,7 @@ database=cpyapp
       For other option groups, Connector/Python ignores unrecognized options.
     </p><p>
       It is not an error for a named option group not to exist.
-    </p><h3><a name="id2910"></a>Option Parsing</h3><p>
+    </p><h3><a name="id2896"></a>Option Parsing</h3><p>
       Connector/Python reads the option values in option files as strings, and
       attempts to parse them using Python's
       <code class="literal">ast.literal_eval</code> function. This allows
@@ -2421,7 +2366,7 @@ failover=({'host': '203.0.113.1', 'port'
         but Python scripts are unable to use it, try setting your
         <code class="literal">DYLD_LIBRARY_PATH</code> environment variable the
         directory containing the C client library. For example:
-      </p><a class="indexterm" name="id2962"></a><a class="indexterm" name="id2964"></a><pre data-lang="terminal" class="programlisting">export DYLD_LIBRARY_PATH=/usr/local/mysql/lib   (for sh)
+      </p><a class="indexterm" name="id2948"></a><a class="indexterm" name="id2950"></a><pre data-lang="terminal" class="programlisting">export DYLD_LIBRARY_PATH=/usr/local/mysql/lib   (for sh)
 setenv DYLD_LIBRARY_PATH /usr/local/mysql/lib   (for tcsh)
 </pre><p>
         If you built the C Extension from source, this directory should
@@ -2548,8 +2493,8 @@ pip install mysql-connector-python
 </pre><p>
         Or pass in [telemetry] when installing Connector/Python to perform the
         same actions except it installs a specific and tested
-        OpenTelemetry version, which for Connector/Python 9.0.0 is
-        OpenTelemetry v1.18.0:
+        OpenTelemetry version, which for Connector/Python 9.4.0 and later is
+        OpenTelemetry v1.33.1:
       </p><pre data-lang="terminal" class="programlisting">pip install mysql-connector-python[telemetry]
 </pre><p>
         Connector/Python 8.1.0 through 8.4.0 included an [opentelemetry] option
@@ -2758,7 +2703,7 @@ with cnx.cursor() as cur:
         cur.execute(code.read())
 
     # Fetch result set, see other examples for additional information 
-</pre><h3><a name="id3099"></a>Multiple Statement Result Mapping</h3><p>
+</pre><h3><a name="id3085"></a>Multiple Statement Result Mapping</h3><p>
       The optional <code class="literal">map_results</code> option (defaults to
       <code class="literal">False</code>) makes each statement relate to its
       corresponding result set.
@@ -2833,7 +2778,7 @@ star plus slash: */
           actual statement delimiter; such as names for tables, columns,
           variables, in comments, and so on. Example:
         </p><pre data-lang="sql" class="programlisting">CREATE TABLE `delimiter` (begin INT, end INT); -- I am a `DELimiTer` comment
-</pre></li></ul></div><h3><a name="id3131"></a>Fetching Result Sets</h3><p>
+</pre></li></ul></div><h3><a name="id3117"></a>Fetching Result Sets</h3><p>
       Basic usage (mapping disabled):
     </p><pre data-lang="python" class="programlisting">sql_operation = """
 SET @a=1, @b='2024-02-01';
@@ -2913,7 +2858,7 @@ with cnx.cursor() as cur:
       statement that caused the current result set. Therefore, the value
       of statement changes accordingly while the result sets are
       traversed.
-    </p><h3><a name="id3148"></a>Shortcut for consuming result sets</h3><p>
+    </p><h3><a name="id3134"></a>Shortcut for consuming result sets</h3><p>
       A fetch-related API command shortcut is available to consume
       result sets, this example is equivalent to the previously
       presented workflow.
@@ -2949,7 +2894,7 @@ with cnx.cursor() as cur:
     </p><p>
       Here are code examples that integrate
       <code class="literal">mysql.connector.aio</code> functionality:
-    </p><h3><a name="id3162"></a>Basic Usage:</h3><pre data-lang="python" class="programlisting">from mysql.connector.aio import connect
+    </p><h3><a name="id3148"></a>Basic Usage:</h3><pre data-lang="python" class="programlisting">from mysql.connector.aio import connect
 
 # Connect to a MySQL server and get a cursor
 cnx = await connect(user="myuser", password="mypass")
@@ -2965,7 +2910,7 @@ print(results)
 # Close cursor and connection
 await cur.close()
 await cnx.close()
-</pre><h3><a name="id3164"></a>Usage with context managers:</h3><pre data-lang="python" class="programlisting">from mysql.connector.aio import connect
+</pre><h3><a name="id3150"></a>Usage with context managers:</h3><pre data-lang="python" class="programlisting">from mysql.connector.aio import connect
 
 # Connect to a MySQL server and get a cursor
 async with await connect(user="myuser", password="mypass") as cnx:
@@ -2976,7 +2921,7 @@ async with await connect(user="myuser",
         # Retrieve the results of the query asynchronously
         results = await cur.fetchall()
         print(results)
-</pre><h3><a name="id3166"></a>Running Multiple Tasks Asynchronously</h3><p>
+</pre><h3><a name="id3152"></a>Running Multiple Tasks Asynchronously</h3><p>
       This example showcases how to run tasks asynchronously and the
       usage of to_thread, which is the backbone to asynchronously run
       blocking functions:
@@ -3187,7 +3132,7 @@ if __name__ == "__main__":
         active thread executes all of the jobs. Asynchronous execution
         is about completing other jobs while waiting for the result of
         an I/O operation.
-      </p></div><h3><a name="id3188"></a>Asynchronous MySQL Queries</h3><p>
+      </p></div><h3><a name="id3174"></a>Asynchronous MySQL Queries</h3><p>
       This is a similar example that uses MySQL queries instead of
       generic jobs.
     </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
@@ -3746,7 +3691,7 @@ cnxpool.set_config(**dbconfig)
       that provides a Django back end for MySQL. This back end supports
       new features found as of MySQL 5.6 such as fractional seconds
       support for temporal data types.
-    </p><h3><a name="id3297"></a>Django Configuration</h3><p>
+    </p><h3><a name="id3283"></a>Django Configuration</h3><p>
       Django uses a configuration file named
       <code class="filename">settings.py</code> that contains a variable called
       <code class="literal">DATABASES</code> (see
@@ -3771,7 +3716,7 @@ cnxpool.set_config(**dbconfig)
 </pre><p>
       It is possible to add more connection arguments using
       <code class="literal">OPTIONS</code>.
-    </p><h3><a name="id3306"></a>Support for MySQL Features</h3><p>
+    </p><h3><a name="id3292"></a>Support for MySQL Features</h3><p>
       Django can launch the MySQL client application
       <span class="command"><strong>mysql</strong></span>. When the Connector/Python back end does this, it
       arranges for the <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_sql_mode" target="_top"><code class="literal">sql_mode</code></a> system
@@ -3817,10 +3762,10 @@ cnxpool.set_config(**dbconfig)
       client_error
   protocol
   utils
-</pre><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysql-connector"></a>10.1 mysql.connector Module</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysql-connector-connect">10.1.1 mysql.connector.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-apilevel">10.1.2 mysql.connector.apilevel Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-paramstyle">10.1.3 mysql.connector.paramstyle Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-threadsafety">10.1.4 mysql.connector.threadsafety Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version">10.1.5 mysql.connector.__version__ Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version-info">10.1.6 mysql.connector.__version_info__ Property</a></span></dt></dl></div><a class="indexterm" name="id3330"></a><a class="indexterm" name="id3332"></a><p>
+</pre><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysql-connector"></a>10.1 mysql.connector Module</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysql-connector-connect">10.1.1 mysql.connector.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-apilevel">10.1.2 mysql.connector.apilevel Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-paramstyle">10.1.3 mysql.connector.paramstyle Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-threadsafety">10.1.4 mysql.connector.threadsafety Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version">10.1.5 mysql.connector.__version__ Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version-info">10.1.6 mysql.connector.__version_info__ Property</a></span></dt></dl></div><a class="indexterm" name="id3316"></a><a class="indexterm" name="id3318"></a><p>
       The <code class="literal">mysql.connector</code> module provides top-level
       methods and properties.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-connect"></a>10.1.1 mysql.connector.connect() Method</h3></div></div></div><a class="indexterm" name="id3338"></a><a class="indexterm" name="id3340"></a><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-connect"></a>10.1.1 mysql.connector.connect() Method</h3></div></div></div><a class="indexterm" name="id3324"></a><a class="indexterm" name="id3326"></a><p>
         This method sets up a connection, establishing a session with
         the MySQL server. If no arguments are given, it uses the already
         configured or default values. For a complete list of possible
@@ -3835,36 +3780,36 @@ cnx = MySQLConnection(user='joe', databa
 </pre><p>
         For descriptions of connection methods and properties, see
         <a class="xref" href="#connector-python-api-mysqlconnection" title="10.2 connection.MySQLConnection Class">Section 10.2, “connection.MySQLConnection Class”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-apilevel"></a>10.1.2 mysql.connector.apilevel Property</h3></div></div></div><a class="indexterm" name="id3352"></a><a class="indexterm" name="id3354"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-apilevel"></a>10.1.2 mysql.connector.apilevel Property</h3></div></div></div><a class="indexterm" name="id3338"></a><a class="indexterm" name="id3340"></a><p>
         This property is a string that indicates the supported DB API
         level.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.apilevel
-'2.0'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-paramstyle"></a>10.1.3 mysql.connector.paramstyle Property</h3></div></div></div><a class="indexterm" name="id3360"></a><a class="indexterm" name="id3362"></a><p>
+'2.0'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-paramstyle"></a>10.1.3 mysql.connector.paramstyle Property</h3></div></div></div><a class="indexterm" name="id3346"></a><a class="indexterm" name="id3348"></a><p>
         This property is a string that indicates the Connector/Python default
         parameter style.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.paramstyle
-'pyformat'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-threadsafety"></a>10.1.4 mysql.connector.threadsafety Property</h3></div></div></div><a class="indexterm" name="id3368"></a><a class="indexterm" name="id3370"></a><p>
+'pyformat'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-threadsafety"></a>10.1.4 mysql.connector.threadsafety Property</h3></div></div></div><a class="indexterm" name="id3354"></a><a class="indexterm" name="id3356"></a><p>
         This property is an integer that indicates the supported level
         of thread safety provided by Connector/Python.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.threadsafety
-1</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-version"></a>10.1.5 mysql.connector.__version__ Property</h3></div></div></div><a class="indexterm" name="id3376"></a><a class="indexterm" name="id3378"></a><p>
+1</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-version"></a>10.1.5 mysql.connector.__version__ Property</h3></div></div></div><a class="indexterm" name="id3362"></a><a class="indexterm" name="id3364"></a><p>
         This property indicates the Connector/Python version as a string. It is
         available as of Connector/Python 1.1.0.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.__version__
-'1.1.0'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-version-info"></a>10.1.6 mysql.connector.__version_info__ Property</h3></div></div></div><a class="indexterm" name="id3384"></a><a class="indexterm" name="id3386"></a><p>
+'1.1.0'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-version-info"></a>10.1.6 mysql.connector.__version_info__ Property</h3></div></div></div><a class="indexterm" name="id3370"></a><a class="indexterm" name="id3372"></a><p>
         This property indicates the Connector/Python version as an array of version
         components. It is available as of Connector/Python 1.1.0.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.__version_info__
-(1, 1, 0, 'a', 0)</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlconnection"></a>10.2 connection.MySQLConnection Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlconnection-constructor">10.2.1 connection.MySQLConnection() Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-close">10.2.2 MySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-commit">10.2.3 MySQLConnection.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-config">10.2.4 MySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connect">10.2.5 MySQLConnection.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cursor">10.2.6 MySQLConnection.cursor() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-change-user">10.2.7 MySQLConnection.cmd_change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-debug">10.2.8 MySQLConnection.cmd_debug() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-init-db">10.2.9 MySQLConnection.cmd_init_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-ping">10.2.10 MySQLConnection.cmd_ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-info">10.2.11 MySQLConnection.cmd_process_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-kill">10.2.12 MySQLConnection.cmd_process_kill() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query">10.2.13 MySQLConnection.cmd_query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query-iter">10.2.14 MySQLConnection.cmd_query_iter() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-quit">10.2.15 MySQLConnection.cmd_quit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-refresh">10.2.16 MySQLConnection.cmd_refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-reset-connection">10.2.17 MySQLConnection.cmd_reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-shutdown">10.2.18 MySQLConnection.cmd_shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-statistics">10.2.19 MySQLConnection.cmd_statistics() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-disconnect">10.2.20 MySQLConnection.disconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-row">10.2.21 MySQLConnection.get_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-rows">10.2.22 MySQLConnection.get_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-info">10.2.23 MySQLConnection.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-version">10.2.24 MySQLConnection.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-is-connected">10.2.25 MySQLConnection.is_connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-isset-client-flag">10.2.26 MySQLConnection.isset_client_flag() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-ping">10.2.27 MySQLConnection.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reconnect">10.2.28 MySQLConnection.reconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reset-session">10.2.29 MySQLConnection.reset_session() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-rollback">10.2.30 MySQLConnection.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-charset-collation">10.2.31 MySQLConnection.set_charset_collation() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-client-flags">10.2.32 MySQLConnection.set_client_flags() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-shutdown">10.2.33 MySQLConnection.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-start-transaction">10.2.34 MySQLConnection.start_transaction() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-autocommit">10.2.35 MySQLConnection.autocommit Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unread-results">10.2.36 MySQLConnection.unread_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-can-consume-results">10.2.37 MySQLConnection.can_consume_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-charset">10.2.38 MySQLConnection.charset Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-client-flags">10.2.39 MySQLConnection.client_flags Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-collation">10.2.40 MySQLConnection.collation Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connected">10.2.41 MySQLConnection.connected Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connection-id">10.2.42 MySQLConnection.connection_id Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-converter-class">10.2.43 MySQLConnection.converter-class Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-database">10.2.44 MySQLConnection.database Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-warnings">10.2.45 MySQLConnection.get_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-in-transaction">10.2.46 MySQLConnection.in_transaction Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-raise-on-warnings">10.2.47 MySQLConnection.raise_on_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-host">10.2.48 MySQLConnection.server_host Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-info">10.2.49 MySQLConnection.server_info Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-port">10.2.50 MySQLConnection.server_port Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-version">10.2.51 MySQLConnection.server_version Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-sql-mode">10.2.52 MySQLConnection.sql_mode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-time-zone">10.2.53 MySQLConnection.time_zone Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-use-unicode">10.2.54 MySQLConnection.use_unicode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unix-socket">10.2.55 MySQLConnection.unix_socket Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-user">10.2.56 MySQLConnection.user Property</a></span></dt></dl></div><a class="indexterm" name="id3392"></a><a class="indexterm" name="id3394"></a><p>
+(1, 1, 0, 'a', 0)</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlconnection"></a>10.2 connection.MySQLConnection Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlconnection-constructor">10.2.1 connection.MySQLConnection() Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-close">10.2.2 MySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-commit">10.2.3 MySQLConnection.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-config">10.2.4 MySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connect">10.2.5 MySQLConnection.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cursor">10.2.6 MySQLConnection.cursor() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-change-user">10.2.7 MySQLConnection.cmd_change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-debug">10.2.8 MySQLConnection.cmd_debug() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-init-db">10.2.9 MySQLConnection.cmd_init_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-ping">10.2.10 MySQLConnection.cmd_ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-info">10.2.11 MySQLConnection.cmd_process_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-kill">10.2.12 MySQLConnection.cmd_process_kill() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query">10.2.13 MySQLConnection.cmd_query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query-iter">10.2.14 MySQLConnection.cmd_query_iter() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-quit">10.2.15 MySQLConnection.cmd_quit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-refresh">10.2.16 MySQLConnection.cmd_refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-reset-connection">10.2.17 MySQLConnection.cmd_reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-shutdown">10.2.18 MySQLConnection.cmd_shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-statistics">10.2.19 MySQLConnection.cmd_statistics() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-disconnect">10.2.20 MySQLConnection.disconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-row">10.2.21 MySQLConnection.get_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-rows">10.2.22 MySQLConnection.get_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-info">10.2.23 MySQLConnection.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-version">10.2.24 MySQLConnection.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-is-connected">10.2.25 MySQLConnection.is_connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-isset-client-flag">10.2.26 MySQLConnection.isset_client_flag() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-ping">10.2.27 MySQLConnection.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reconnect">10.2.28 MySQLConnection.reconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reset-session">10.2.29 MySQLConnection.reset_session() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-rollback">10.2.30 MySQLConnection.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-charset-collation">10.2.31 MySQLConnection.set_charset_collation() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-client-flags">10.2.32 MySQLConnection.set_client_flags() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-shutdown">10.2.33 MySQLConnection.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-start-transaction">10.2.34 MySQLConnection.start_transaction() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-autocommit">10.2.35 MySQLConnection.autocommit Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unread-results">10.2.36 MySQLConnection.unread_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-can-consume-results">10.2.37 MySQLConnection.can_consume_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-charset">10.2.38 MySQLConnection.charset Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-client-flags">10.2.39 MySQLConnection.client_flags Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-collation">10.2.40 MySQLConnection.collation Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connected">10.2.41 MySQLConnection.connected Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connection-id">10.2.42 MySQLConnection.connection_id Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-converter-class">10.2.43 MySQLConnection.converter-class Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-database">10.2.44 MySQLConnection.database Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-warnings">10.2.45 MySQLConnection.get_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-in-transaction">10.2.46 MySQLConnection.in_transaction Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-raise-on-warnings">10.2.47 MySQLConnection.raise_on_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-host">10.2.48 MySQLConnection.server_host Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-info">10.2.49 MySQLConnection.server_info Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-port">10.2.50 MySQLConnection.server_port Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-version">10.2.51 MySQLConnection.server_version Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-sql-mode">10.2.52 MySQLConnection.sql_mode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-time-zone">10.2.53 MySQLConnection.time_zone Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-use-unicode">10.2.54 MySQLConnection.use_unicode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unix-socket">10.2.55 MySQLConnection.unix_socket Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-user">10.2.56 MySQLConnection.user Property</a></span></dt></dl></div><a class="indexterm" name="id3378"></a><a class="indexterm" name="id3380"></a><p>
       The <code class="literal">MySQLConnection</code> class is used to open and
       manage a connection to a MySQL server. It also used to send
       commands and SQL statements and read the results.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-constructor"></a>10.2.1 connection.MySQLConnection() Constructor</h3></div></div></div><a class="indexterm" name="id3400"></a><a class="indexterm" name="id3402"></a><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-constructor"></a>10.2.1 connection.MySQLConnection() Constructor</h3></div></div></div><a class="indexterm" name="id3386"></a><a class="indexterm" name="id3388"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx = MySQLConnection(**kwargs)
 </pre><p>
@@ -3874,7 +3819,7 @@ cnx = MySQLConnection(user='joe', databa
       </p><p>
         For a complete list of arguments, see
         <a class="xref" href="#connector-python-connectargs" title="7.1 Connector/Python Connection Arguments">Section 7.1, “Connector/Python Connection Arguments”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-close"></a>10.2.2 MySQLConnection.close() Method</h3></div></div></div><a class="indexterm" name="id3412"></a><a class="indexterm" name="id3414"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-close"></a>10.2.2 MySQLConnection.close() Method</h3></div></div></div><a class="indexterm" name="id3398"></a><a class="indexterm" name="id3400"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.close()
 </pre><p>
@@ -3887,7 +3832,7 @@ cnx = MySQLConnection(user='joe', databa
         returns it to the pool and makes it available for subsequent
         connection requests. See
         <a class="xref" href="#connector-python-connection-pooling" title="9.5 Connector/Python Connection Pooling">Section 9.5, “Connector/Python Connection Pooling”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-commit"></a>10.2.3 MySQLConnection.commit() Method</h3></div></div></div><a class="indexterm" name="id3427"></a><a class="indexterm" name="id3429"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-commit"></a>10.2.3 MySQLConnection.commit() Method</h3></div></div></div><a class="indexterm" name="id3413"></a><a class="indexterm" name="id3415"></a><p>
         This method sends a <code class="literal">COMMIT</code> statement to the
         MySQL server, committing the current transaction. Since by
         default Connector/Python does not autocommit, it is important to call this
@@ -3899,7 +3844,7 @@ cnx = MySQLConnection(user='joe', databa
         To roll back instead and discard modifications, see the
         <a class="link" href="#connector-python-api-mysqlconnection-rollback" title="10.2.30 MySQLConnection.rollback() Method">rollback()</a>
         method.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-config"></a>10.2.4 MySQLConnection.config() Method</h3></div></div></div><a class="indexterm" name="id3438"></a><a class="indexterm" name="id3440"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-config"></a>10.2.4 MySQLConnection.config() Method</h3></div></div></div><a class="indexterm" name="id3424"></a><a class="indexterm" name="id3426"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.config(**kwargs)
 </pre><p>
@@ -3925,7 +3870,7 @@ cnx.reconnect()
         For a connection obtained from a connection pool,
         <code class="literal">config()</code> raises an exception. See
         <a class="xref" href="#connector-python-connection-pooling" title="9.5 Connector/Python Connection Pooling">Section 9.5, “Connector/Python Connection Pooling”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connect"></a>10.2.5 MySQLConnection.connect() Method</h3></div></div></div><a class="indexterm" name="id3462"></a><a class="indexterm" name="id3464"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connect"></a>10.2.5 MySQLConnection.connect() Method</h3></div></div></div><a class="indexterm" name="id3448"></a><a class="indexterm" name="id3450"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">MySQLConnection.connect(**kwargs)
 </pre><p>
@@ -3946,7 +3891,7 @@ cnx.reconnect()
         pooled connection differs from an unpooled connection as
         described in
         <a class="xref" href="#connector-python-connection-pooling" title="9.5 Connector/Python Connection Pooling">Section 9.5, “Connector/Python Connection Pooling”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cursor"></a>10.2.6 MySQLConnection.cursor() Method</h3></div></div></div><a class="indexterm" name="id3482"></a><a class="indexterm" name="id3484"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cursor"></a>10.2.6 MySQLConnection.cursor() Method</h3></div></div></div><a class="indexterm" name="id3468"></a><a class="indexterm" name="id3470"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor = cnx.cursor([arg=value[, arg=value]...])
 </pre><p>
@@ -4013,7 +3958,7 @@ cnx.reconnect()
           </p></li><li class="listitem"><p>
             If buffered and raw:
             <code class="literal">MySQLCursorBufferedRaw</code>
-          </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-change-user"></a>10.2.7 MySQLConnection.cmd_change_user() Method</h3></div></div></div><a class="indexterm" name="id3546"></a><a class="indexterm" name="id3548"></a><p>
+          </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-change-user"></a>10.2.7 MySQLConnection.cmd_change_user() Method</h3></div></div></div><a class="indexterm" name="id3532"></a><a class="indexterm" name="id3534"></a><p>
         Changes the user using <code class="literal">username</code> and
         <code class="literal">password</code>. It also causes the specified
         <code class="literal">database</code> to become the default (current)
@@ -4024,13 +3969,13 @@ cnx.reconnect()
       </p><pre data-lang="python" class="programlisting">cnx.cmd_change_user(username='', password='', database='', charset=33)
 </pre><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-debug"></a>10.2.8 MySQLConnection.cmd_debug() Method</h3></div></div></div><a class="indexterm" name="id3560"></a><a class="indexterm" name="id3562"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-debug"></a>10.2.8 MySQLConnection.cmd_debug() Method</h3></div></div></div><a class="indexterm" name="id3546"></a><a class="indexterm" name="id3548"></a><p>
         Instructs the server to write debugging information to the error
         log. The connected user must have the
         <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_super" target="_top"><code class="literal">SUPER</code></a> privilege.
       </p><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-init-db"></a>10.2.9 MySQLConnection.cmd_init_db() Method</h3></div></div></div><a class="indexterm" name="id3570"></a><a class="indexterm" name="id3572"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-init-db"></a>10.2.9 MySQLConnection.cmd_init_db() Method</h3></div></div></div><a class="indexterm" name="id3556"></a><a class="indexterm" name="id3558"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_init_db(db_name)
 </pre><p>
@@ -4040,7 +3985,7 @@ cnx.reconnect()
         qualifier.
       </p><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-ping"></a>10.2.10 MySQLConnection.cmd_ping() Method</h3></div></div></div><a class="indexterm" name="id3580"></a><a class="indexterm" name="id3582"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-ping"></a>10.2.10 MySQLConnection.cmd_ping() Method</h3></div></div></div><a class="indexterm" name="id3566"></a><a class="indexterm" name="id3568"></a><p>
         Checks whether the connection to the server is working.
       </p><p>
         This method is not to be used directly. Use
@@ -4050,14 +3995,14 @@ cnx.reconnect()
         instead.
       </p><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-process-info"></a>10.2.11 MySQLConnection.cmd_process_info() Method</h3></div></div></div><a class="indexterm" name="id3591"></a><a class="indexterm" name="id3593"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-process-info"></a>10.2.11 MySQLConnection.cmd_process_info() Method</h3></div></div></div><a class="indexterm" name="id3577"></a><a class="indexterm" name="id3579"></a><p>
         This method raises the NotSupportedError exception. Instead, use
         the <code class="literal">SHOW PROCESSLIST</code> statement or query the
         tables found in the database
         <code class="literal">INFORMATION_SCHEMA</code>.
       </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This MySQL Server functionality is deprecated.
-        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-process-kill"></a>10.2.12 MySQLConnection.cmd_process_kill() Method</h3></div></div></div><a class="indexterm" name="id3603"></a><a class="indexterm" name="id3605"></a><p>
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-process-kill"></a>10.2.12 MySQLConnection.cmd_process_kill() Method</h3></div></div></div><a class="indexterm" name="id3589"></a><a class="indexterm" name="id3591"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_process_kill(mysql_pid)
 </pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
@@ -4072,7 +4017,7 @@ cnx.reconnect()
         The following two lines have the same effect:
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; cnx.cmd_process_kill(123)
-&gt;&gt;&gt; cnx.cmd_query('KILL 123')</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-query"></a>10.2.13 MySQLConnection.cmd_query() Method</h3></div></div></div><a class="indexterm" name="id3620"></a><a class="indexterm" name="id3622"></a><p>
+&gt;&gt;&gt; cnx.cmd_query('KILL 123')</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-query"></a>10.2.13 MySQLConnection.cmd_query() Method</h3></div></div></div><a class="indexterm" name="id3606"></a><a class="indexterm" name="id3608"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_query(statement)
 </pre><p>
@@ -4093,7 +4038,7 @@ cnx.reconnect()
         results are found.
       </p><p>
         Returns a dictionary.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-query-iter"></a>10.2.14 MySQLConnection.cmd_query_iter() Method</h3></div></div></div><a class="indexterm" name="id3637"></a><a class="indexterm" name="id3639"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-query-iter"></a>10.2.14 MySQLConnection.cmd_query_iter() Method</h3></div></div></div><a class="indexterm" name="id3623"></a><a class="indexterm" name="id3625"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_query_iter(statement)
 </pre><p>
@@ -4115,12 +4060,12 @@ for result in cnx.cmd_query_iter(stateme
     # do something useful with INSERT result
 </pre><p>
         Returns a generator object.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-quit"></a>10.2.15 MySQLConnection.cmd_quit() Method</h3></div></div></div><a class="indexterm" name="id3651"></a><a class="indexterm" name="id3653"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-quit"></a>10.2.15 MySQLConnection.cmd_quit() Method</h3></div></div></div><a class="indexterm" name="id3637"></a><a class="indexterm" name="id3639"></a><p>
         This method sends a <code class="literal">QUIT</code> command to the MySQL
         server, closing the current connection. Since there is no
         response from the MySQL server, the packet that was sent is
         returned.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-refresh"></a>10.2.16 MySQLConnection.cmd_refresh() Method</h3></div></div></div><a class="indexterm" name="id3659"></a><a class="indexterm" name="id3661"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-refresh"></a>10.2.16 MySQLConnection.cmd_refresh() Method</h3></div></div></div><a class="indexterm" name="id3645"></a><a class="indexterm" name="id3647"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_refresh(options)
 </pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
@@ -4141,7 +4086,7 @@ for result in cnx.cmd_query_iter(stateme
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; from mysql.connector import RefreshOption
 &gt;&gt;&gt; refresh = RefreshOption.LOG | RefreshOption.THREADS
-&gt;&gt;&gt; cnx.cmd_refresh(refresh)</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-reset-connection"></a>10.2.17 MySQLConnection.cmd_reset_connection() Method</h3></div></div></div><a class="indexterm" name="id3679"></a><a class="indexterm" name="id3681"></a><p>
+&gt;&gt;&gt; cnx.cmd_refresh(refresh)</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-reset-connection"></a>10.2.17 MySQLConnection.cmd_reset_connection() Method</h3></div></div></div><a class="indexterm" name="id3665"></a><a class="indexterm" name="id3667"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_reset_connection()
 </pre><p>
@@ -4157,18 +4102,18 @@ for result in cnx.cmd_query_iter(stateme
         by reauthenticating, which is more expensive.
       </p><p>
         This method was added in Connector/Python 1.2.1.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-shutdown"></a>10.2.18 MySQLConnection.cmd_shutdown() Method</h3></div></div></div><a class="indexterm" name="id3694"></a><a class="indexterm" name="id3696"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-shutdown"></a>10.2.18 MySQLConnection.cmd_shutdown() Method</h3></div></div></div><a class="indexterm" name="id3680"></a><a class="indexterm" name="id3682"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This MySQL Server functionality is deprecated.
         </p></div><p>
         Asks the database server to shut down. The connected user must
         have the <code class="literal">SHUTDOWN</code> privilege.
       </p><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-statistics"></a>10.2.19 MySQLConnection.cmd_statistics() Method</h3></div></div></div><a class="indexterm" name="id3706"></a><a class="indexterm" name="id3708"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-statistics"></a>10.2.19 MySQLConnection.cmd_statistics() Method</h3></div></div></div><a class="indexterm" name="id3692"></a><a class="indexterm" name="id3694"></a><p>
         Returns a dictionary containing information about the MySQL
         server including uptime in seconds and the number of running
         threads, questions, reloads, and open tables.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-disconnect"></a>10.2.20 MySQLConnection.disconnect() Method</h3></div></div></div><a class="indexterm" name="id3713"></a><a class="indexterm" name="id3715"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-disconnect"></a>10.2.20 MySQLConnection.disconnect() Method</h3></div></div></div><a class="indexterm" name="id3699"></a><a class="indexterm" name="id3701"></a><p>
         This method tries to send a <code class="literal">QUIT</code> command and
         close the socket. It raises no exceptions.
       </p><p>
@@ -4178,7 +4123,7 @@ for result in cnx.cmd_query_iter(stateme
         To shut down the connection without sending a
         <code class="literal">QUIT</code> command first, use
         <a class="link" href="#connector-python-api-mysqlconnection-shutdown" title="10.2.33 MySQLConnection.shutdown() Method"><code class="literal">shutdown()</code></a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-row"></a>10.2.21 MySQLConnection.get_row() Method</h3></div></div></div><a class="indexterm" name="id3727"></a><a class="indexterm" name="id3729"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-row"></a>10.2.21 MySQLConnection.get_row() Method</h3></div></div></div><a class="indexterm" name="id3713"></a><a class="indexterm" name="id3715"></a><p>
         This method retrieves the next row of a query result set,
         returning a tuple.
       </p><p>
@@ -4195,7 +4140,7 @@ for result in cnx.cmd_query_iter(stateme
         The <code class="literal">get_row()</code> method is used by
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class">MySQLCursor</a>
         to fetch rows.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-rows"></a>10.2.22 MySQLConnection.get_rows() Method</h3></div></div></div><a class="indexterm" name="id3748"></a><a class="indexterm" name="id3750"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-rows"></a>10.2.22 MySQLConnection.get_rows() Method</h3></div></div></div><a class="indexterm" name="id3734"></a><a class="indexterm" name="id3736"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.get_rows(count=None)
 </pre><p>
@@ -4221,7 +4166,7 @@ for result in cnx.cmd_query_iter(stateme
         uses the <code class="literal">get_rows()</code> method to fetch rows.
       </p><p>
         Returns a tuple.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-server-info"></a>10.2.23 MySQLConnection.get_server_info() Method</h3></div></div></div><a class="indexterm" name="id3773"></a><a class="indexterm" name="id3775"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-server-info"></a>10.2.23 MySQLConnection.get_server_info() Method</h3></div></div></div><a class="indexterm" name="id3759"></a><a class="indexterm" name="id3761"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlconnection-server-info" title="10.2.49 MySQLConnection.server_info Property">Section 10.2.49, “MySQLConnection.server_info Property”</a>
@@ -4230,7 +4175,7 @@ for result in cnx.cmd_query_iter(stateme
         This method returns the MySQL server information verbatim as a
         string, for example <code class="literal">'5.6.11-log'</code>, or
         <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-server-version"></a>10.2.24 MySQLConnection.get_server_version() Method</h3></div></div></div><a class="indexterm" name="id3786"></a><a class="indexterm" name="id3788"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-server-version"></a>10.2.24 MySQLConnection.get_server_version() Method</h3></div></div></div><a class="indexterm" name="id3772"></a><a class="indexterm" name="id3774"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlconnection-server-version" title="10.2.51 MySQLConnection.server_version Property">Section 10.2.51, “MySQLConnection.server_version Property”</a>
@@ -4238,7 +4183,7 @@ for result in cnx.cmd_query_iter(stateme
         </p></div><p>
         This method returns the MySQL server version as a tuple, or
         <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-is-connected"></a>10.2.25 MySQLConnection.is_connected() Method</h3></div></div></div><a class="indexterm" name="id3798"></a><a class="indexterm" name="id3800"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-is-connected"></a>10.2.25 MySQLConnection.is_connected() Method</h3></div></div></div><a class="indexterm" name="id3784"></a><a class="indexterm" name="id3786"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlconnection-connected" title="10.2.41 MySQLConnection.connected Property">Section 10.2.41, “MySQLConnection.connected Property”</a>
@@ -4253,13 +4198,13 @@ for result in cnx.cmd_query_iter(stateme
         <code class="literal">is_connected()</code> returns
         <code class="literal">True</code> when the connection is available,
         <code class="literal">False</code> otherwise.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-isset-client-flag"></a>10.2.26 MySQLConnection.isset_client_flag() Method</h3></div></div></div><a class="indexterm" name="id3815"></a><a class="indexterm" name="id3817"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-isset-client-flag"></a>10.2.26 MySQLConnection.isset_client_flag() Method</h3></div></div></div><a class="indexterm" name="id3801"></a><a class="indexterm" name="id3803"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.isset_client_flag(flag)
 </pre><p>
         This method returns <code class="literal">True</code> if the client flag
         was set, <code class="literal">False</code> otherwise.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-ping"></a>10.2.27 MySQLConnection.ping() Method</h3></div></div></div><a class="indexterm" name="id3826"></a><a class="indexterm" name="id3828"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-ping"></a>10.2.27 MySQLConnection.ping() Method</h3></div></div></div><a class="indexterm" name="id3812"></a><a class="indexterm" name="id3814"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.ping(reconnect=False, attempts=1, delay=0)
 </pre><p>
@@ -4280,7 +4225,7 @@ for result in cnx.cmd_query_iter(stateme
         method to check the connection without raising an error.
       </p><p>
         Raises <code class="literal">InterfaceError</code> on errors.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-reconnect"></a>10.2.28 MySQLConnection.reconnect() Method</h3></div></div></div><a class="indexterm" name="id3846"></a><a class="indexterm" name="id3848"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-reconnect"></a>10.2.28 MySQLConnection.reconnect() Method</h3></div></div></div><a class="indexterm" name="id3832"></a><a class="indexterm" name="id3834"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.reconnect(attempts=1, delay=0)
 </pre><p>
@@ -4294,7 +4239,7 @@ for result in cnx.cmd_query_iter(stateme
         delay when you expect the MySQL server to be down for
         maintenance, or when you expect the network to be temporarily
         unavailable.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-reset-session"></a>10.2.29 MySQLConnection.reset_session() Method</h3></div></div></div><a class="indexterm" name="id3859"></a><a class="indexterm" name="id3861"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-reset-session"></a>10.2.29 MySQLConnection.reset_session() Method</h3></div></div></div><a class="indexterm" name="id3845"></a><a class="indexterm" name="id3847"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.reset_session(user_variables = None, session_variables = None)
 </pre><p>
@@ -4316,7 +4261,7 @@ self.cnx.reset_session(user_variables, s
         method is a more lightweight alternative.
       </p><p>
         This method was added in Connector/Python 1.2.1.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-rollback"></a>10.2.30 MySQLConnection.rollback() Method</h3></div></div></div><a class="indexterm" name="id3876"></a><a class="indexterm" name="id3878"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-rollback"></a>10.2.30 MySQLConnection.rollback() Method</h3></div></div></div><a class="indexterm" name="id3862"></a><a class="indexterm" name="id3864"></a><p>
         This method sends a <code class="literal">ROLLBACK</code> statement to the
         MySQL server, undoing all data changes from the current
         transaction. By default, Connector/Python does not autocommit, so it is
@@ -4329,7 +4274,7 @@ self.cnx.reset_session(user_variables, s
         the
         <a class="link" href="#connector-python-api-mysqlconnection-commit" title="10.2.3 MySQLConnection.commit() Method">commit()</a>
         method.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-set-charset-collation"></a>10.2.31 MySQLConnection.set_charset_collation() Method</h3></div></div></div><a class="indexterm" name="id3889"></a><a class="indexterm" name="id3891"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-set-charset-collation"></a>10.2.31 MySQLConnection.set_charset_collation() Method</h3></div></div></div><a class="indexterm" name="id3875"></a><a class="indexterm" name="id3877"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.set_charset_collation(charset=None, collation=None)
 </pre><p>
@@ -4352,7 +4297,7 @@ self.cnx.reset_session(user_variables, s
         Specify a given collation as follows:
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; cnx = mysql.connector.connect(user='scott')
-&gt;&gt;&gt; cnx.set_charset_collation('latin1', 'latin1_general_ci')</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-set-client-flags"></a>10.2.32 MySQLConnection.set_client_flags() Method</h3></div></div></div><a class="indexterm" name="id3910"></a><a class="indexterm" name="id3912"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+&gt;&gt;&gt; cnx.set_charset_collation('latin1', 'latin1_general_ci')</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-set-client-flags"></a>10.2.32 MySQLConnection.set_client_flags() Method</h3></div></div></div><a class="indexterm" name="id3896"></a><a class="indexterm" name="id3898"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlconnection-client-flags" title="10.2.39 MySQLConnection.client_flags Property">Section 10.2.39, “MySQLConnection.client_flags Property”</a>
@@ -4379,7 +4324,7 @@ self.cnx.reset_session(user_variables, s
           Client flags are only set or used when connecting to the MySQL
           server. It is therefore necessary to reconnect after making
           changes.
-        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-shutdown"></a>10.2.33 MySQLConnection.shutdown() Method</h3></div></div></div><a class="indexterm" name="id3932"></a><a class="indexterm" name="id3934"></a><p>
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-shutdown"></a>10.2.33 MySQLConnection.shutdown() Method</h3></div></div></div><a class="indexterm" name="id3918"></a><a class="indexterm" name="id3920"></a><p>
         This method closes the socket. It raises no exceptions.
       </p><p>
         Unlike
@@ -4390,7 +4335,7 @@ self.cnx.reset_session(user_variables, s
         disrupted for some reason such as network failure.
       </p><p>
         <code class="literal">shutdown()</code> was added in Connector/Python 2.0.1.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-start-transaction"></a>10.2.34 MySQLConnection.start_transaction() Method</h3></div></div></div><a class="indexterm" name="id3946"></a><a class="indexterm" name="id3948"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-start-transaction"></a>10.2.34 MySQLConnection.start_transaction() Method</h3></div></div></div><a class="indexterm" name="id3932"></a><a class="indexterm" name="id3934"></a><p>
         This method starts a transaction. It accepts arguments
         indicating whether to use a consistent snapshot, which
         transaction isolation level to use, and the transaction access
@@ -4441,7 +4386,7 @@ self.cnx.reset_session(user_variables, s
         <code class="literal">start_transaction()</code> was added in MySQL Connector/Python
         1.1.0. The <code class="literal">readonly</code> argument was added in
         Connector/Python 1.1.5.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-autocommit"></a>10.2.35 MySQLConnection.autocommit Property</h3></div></div></div><a class="indexterm" name="id3991"></a><a class="indexterm" name="id3993"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-autocommit"></a>10.2.35 MySQLConnection.autocommit Property</h3></div></div></div><a class="indexterm" name="id3977"></a><a class="indexterm" name="id3979"></a><p>
         This property can be assigned a value of <code class="literal">True</code>
         or <code class="literal">False</code> to enable or disable the autocommit
         feature of MySQL. The property can be invoked to retrieve the
@@ -4462,7 +4407,7 @@ self.cnx.reset_session(user_variables, s
 False
 &gt;&gt;&gt; cnx.autocommit = True
 &gt;&gt;&gt; cnx.autocommit
-True</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-unread-results"></a>10.2.36 MySQLConnection.unread_results Property</h3></div></div></div><a class="indexterm" name="id4009"></a><a class="indexterm" name="id4011"></a><p>
+True</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-unread-results"></a>10.2.36 MySQLConnection.unread_results Property</h3></div></div></div><a class="indexterm" name="id3995"></a><a class="indexterm" name="id3997"></a><p>
         Indicates whether there is an unread result. It is set to
         <code class="literal">False</code> if there is not an unread result,
         otherwise <code class="literal">True</code>. This is used by cursors to
@@ -4472,7 +4417,7 @@ True</pre></div><div class="section"><di
         Do not set the value of this property, as only the connector
         should change the value. In other words, treat this as a
         read-only property.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-can-consume-results"></a>10.2.37 MySQLConnection.can_consume_results Property</h3></div></div></div><a class="indexterm" name="id4019"></a><a class="indexterm" name="id4021"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-can-consume-results"></a>10.2.37 MySQLConnection.can_consume_results Property</h3></div></div></div><a class="indexterm" name="id4005"></a><a class="indexterm" name="id4007"></a><p>
         This property indicates the value of the
         <code class="literal">consume_results</code> connection parameter that
         controls whether result sets produced by queries are
@@ -4480,10 +4425,10 @@ True</pre></div><div class="section"><di
         <a class="xref" href="#connector-python-connectargs" title="7.1 Connector/Python Connection Arguments">Section 7.1, “Connector/Python Connection Arguments”</a>.
       </p><p>
         This method was added in Connector/Python 2.1.1.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-charset"></a>10.2.38 MySQLConnection.charset Property</h3></div></div></div><a class="indexterm" name="id4029"></a><a class="indexterm" name="id4031"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-charset"></a>10.2.38 MySQLConnection.charset Property</h3></div></div></div><a class="indexterm" name="id4015"></a><a class="indexterm" name="id4017"></a><p>
         This property returns a string indicating which character set is
         used for the connection, whether or not it is connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-client-flags"></a>10.2.39 MySQLConnection.client_flags Property</h3></div></div></div><a class="indexterm" name="id4036"></a><a class="indexterm" name="id4038"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-client-flags"></a>10.2.39 MySQLConnection.client_flags Property</h3></div></div></div><a class="indexterm" name="id4022"></a><a class="indexterm" name="id4024"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">&gt;&gt;&gt; cnx.client_flags=flags
 &gt;&gt;&gt; cnx.clieng_flags
@@ -4506,10 +4451,10 @@ True</pre></div><div class="section"><di
           Client flags are only set or used when connecting to the MySQL
           server. It is therefore necessary to reconnect after making
           changes.
-        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-collation"></a>10.2.40 MySQLConnection.collation Property</h3></div></div></div><a class="indexterm" name="id4054"></a><a class="indexterm" name="id4056"></a><p>
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-collation"></a>10.2.40 MySQLConnection.collation Property</h3></div></div></div><a class="indexterm" name="id4040"></a><a class="indexterm" name="id4042"></a><p>
         This property returns a string indicating which collation is
         used for the connection, whether or not it is connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connected"></a>10.2.41 MySQLConnection.connected Property</h3></div></div></div><a class="indexterm" name="id4061"></a><a class="indexterm" name="id4063"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connected"></a>10.2.41 MySQLConnection.connected Property</h3></div></div></div><a class="indexterm" name="id4047"></a><a class="indexterm" name="id4049"></a><p>
         Reports whether the connection to MySQL Server is available.
       </p><p>
         This read-only property checks whether the connection to MySQL
@@ -4519,11 +4464,11 @@ True</pre></div><div class="section"><di
         <code class="literal">connected</code> returns <code class="literal">True</code>
         when the connection is available, and <code class="literal">False</code>
         otherwise.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connection-id"></a>10.2.42 MySQLConnection.connection_id Property</h3></div></div></div><a class="indexterm" name="id4074"></a><a class="indexterm" name="id4076"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connection-id"></a>10.2.42 MySQLConnection.connection_id Property</h3></div></div></div><a class="indexterm" name="id4060"></a><a class="indexterm" name="id4062"></a><p>
         This property returns the integer connection ID (thread ID or
         session ID) for the current connection or
         <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-converter-class"></a>10.2.43 MySQLConnection.converter-class Property</h3></div></div></div><a class="indexterm" name="id4082"></a><a class="indexterm" name="id4084"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-converter-class"></a>10.2.43 MySQLConnection.converter-class Property</h3></div></div></div><a class="indexterm" name="id4068"></a><a class="indexterm" name="id4070"></a><p>
         This property sets and returns the converter class to use when
         configuring the connection.
       </p><pre data-lang="python" class="programlisting"># get the current converter class being used
@@ -4535,7 +4480,7 @@ class TestConverter(MySQLConverterBase):
 # set the custom converter class
 cnx.converter_class = TestConverter
 print(cnx.converter_class)
-&gt;&gt; &lt;class '__main__.TestConverter'&gt;</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-database"></a>10.2.44 MySQLConnection.database Property</h3></div></div></div><a class="indexterm" name="id4090"></a><a class="indexterm" name="id4092"></a><p>
+&gt;&gt; &lt;class '__main__.TestConverter'&gt;</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-database"></a>10.2.44 MySQLConnection.database Property</h3></div></div></div><a class="indexterm" name="id4076"></a><a class="indexterm" name="id4078"></a><p>
         This property sets the current (default) database by executing a
         <code class="literal">USE</code> statement. The property can also be used
         to retrieve the current database name.
@@ -4546,7 +4491,7 @@ print(cnx.converter_class)
 u'mysql'
 </pre><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-warnings"></a>10.2.45 MySQLConnection.get_warnings Property</h3></div></div></div><a class="indexterm" name="id4100"></a><a class="indexterm" name="id4102"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-warnings"></a>10.2.45 MySQLConnection.get_warnings Property</h3></div></div></div><a class="indexterm" name="id4086"></a><a class="indexterm" name="id4088"></a><p>
         This property can be assigned a value of <code class="literal">True</code>
         or <code class="literal">False</code> to enable or disable whether
         warnings should be fetched automatically. The default is
@@ -4565,7 +4510,7 @@ u'mysql'
 [(u'Warning', 1292, u"Truncated incorrect DOUBLE value: 'a'")]
 </pre><p>
         Returns <code class="literal">True</code> or <code class="literal">False</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-in-transaction"></a>10.2.46 MySQLConnection.in_transaction Property</h3></div></div></div><a class="indexterm" name="id4116"></a><a class="indexterm" name="id4118"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-in-transaction"></a>10.2.46 MySQLConnection.in_transaction Property</h3></div></div></div><a class="indexterm" name="id4102"></a><a class="indexterm" name="id4104"></a><p>
         This property returns <code class="literal">True</code> or
         <code class="literal">False</code> to indicate whether a transaction is
         active for the connection. The value is <code class="literal">True</code>
@@ -4584,7 +4529,7 @@ True
 False
 </pre><p>
         <code class="literal">in_transaction</code> was added in MySQL Connector/Python 1.1.0.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-raise-on-warnings"></a>10.2.47 MySQLConnection.raise_on_warnings Property</h3></div></div></div><a class="indexterm" name="id4135"></a><a class="indexterm" name="id4137"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-raise-on-warnings"></a>10.2.47 MySQLConnection.raise_on_warnings Property</h3></div></div></div><a class="indexterm" name="id4121"></a><a class="indexterm" name="id4123"></a><p>
         This property can be assigned a value of <code class="literal">True</code>
         or <code class="literal">False</code> to enable or disable whether
         warnings should raise exceptions. The default is
@@ -4612,24 +4557,24 @@ False
 mysql.connector.errors.DataError: 1292: Truncated incorrect DOUBLE value: 'a'
 </pre><p>
         Returns <code class="literal">True</code> or <code class="literal">False</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-host"></a>10.2.48 MySQLConnection.server_host Property</h3></div></div></div><a class="indexterm" name="id4156"></a><a class="indexterm" name="id4158"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-host"></a>10.2.48 MySQLConnection.server_host Property</h3></div></div></div><a class="indexterm" name="id4142"></a><a class="indexterm" name="id4144"></a><p>
         This read-only property returns the host name or IP address used
         for connecting to the MySQL server.
       </p><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-info"></a>10.2.49 MySQLConnection.server_info Property</h3></div></div></div><a class="indexterm" name="id4164"></a><a class="indexterm" name="id4166"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-info"></a>10.2.49 MySQLConnection.server_info Property</h3></div></div></div><a class="indexterm" name="id4150"></a><a class="indexterm" name="id4152"></a><p>
         This read-only property returns the MySQL server information
         verbatim as a string: for example <code class="literal">8.4.0-log</code>,
         or <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-port"></a>10.2.50 MySQLConnection.server_port Property</h3></div></div></div><a class="indexterm" name="id4173"></a><a class="indexterm" name="id4175"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-port"></a>10.2.50 MySQLConnection.server_port Property</h3></div></div></div><a class="indexterm" name="id4159"></a><a class="indexterm" name="id4161"></a><p>
         This read-only property returns the TCP/IP port used for
         connecting to the MySQL server.
       </p><p>
         Returns an integer.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-version"></a>10.2.51 MySQLConnection.server_version Property</h3></div></div></div><a class="indexterm" name="id4181"></a><a class="indexterm" name="id4183"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-version"></a>10.2.51 MySQLConnection.server_version Property</h3></div></div></div><a class="indexterm" name="id4167"></a><a class="indexterm" name="id4169"></a><p>
         This read-only property returns the MySQL server version as a
         tuple, or <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-sql-mode"></a>10.2.52 MySQLConnection.sql_mode Property</h3></div></div></div><a class="indexterm" name="id4189"></a><a class="indexterm" name="id4191"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-sql-mode"></a>10.2.52 MySQLConnection.sql_mode Property</h3></div></div></div><a class="indexterm" name="id4175"></a><a class="indexterm" name="id4177"></a><p>
         This property is used to retrieve and set the SQL Modes for the
         current connection. The value should be a list of different
         modes separated by comma (","), or a sequence of modes,
@@ -4649,7 +4594,7 @@ u'NO_AUTO_CREATE_USER', u'NO_ENGINE_SUBS
 u'REAL_AS_FLOAT,NO_ZERO_DATE'
 </pre><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-time-zone"></a>10.2.53 MySQLConnection.time_zone Property</h3></div></div></div><a class="indexterm" name="id4200"></a><a class="indexterm" name="id4202"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-time-zone"></a>10.2.53 MySQLConnection.time_zone Property</h3></div></div></div><a class="indexterm" name="id4186"></a><a class="indexterm" name="id4188"></a><p>
         This property is used to set or retrieve the time zone session
         variable for the current connection.
       </p><pre data-lang="python" class="programlisting">
@@ -4664,7 +4609,7 @@ u'REAL_AS_FLOAT,NO_ZERO_DATE'
 u'-09:00'
 </pre><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-use-unicode"></a>10.2.54 MySQLConnection.use_unicode Property</h3></div></div></div><a class="indexterm" name="id4209"></a><a class="indexterm" name="id4211"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-use-unicode"></a>10.2.54 MySQLConnection.use_unicode Property</h3></div></div></div><a class="indexterm" name="id4195"></a><a class="indexterm" name="id4197"></a><p>
         This property sets and returns whether the connection uses
         Unicode with the value <code class="literal">True</code> or
         <code class="literal">False</code>.
@@ -4677,20 +4622,20 @@ print(cnx.use_unicode)
 cnx.use_unicode = False
 print(cnx.use_unicode)
 &gt;&gt; False</pre><p>
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-unix-socket"></a>10.2.55 MySQLConnection.unix_socket Property</h3></div></div></div><a class="indexterm" name="id4219"></a><a class="indexterm" name="id4221"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-unix-socket"></a>10.2.55 MySQLConnection.unix_socket Property</h3></div></div></div><a class="indexterm" name="id4205"></a><a class="indexterm" name="id4207"></a><p>
         This read-only property returns the Unix socket file for
         connecting to the MySQL server.
       </p><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-user"></a>10.2.56 MySQLConnection.user Property</h3></div></div></div><a class="indexterm" name="id4227"></a><a class="indexterm" name="id4229"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-user"></a>10.2.56 MySQLConnection.user Property</h3></div></div></div><a class="indexterm" name="id4213"></a><a class="indexterm" name="id4215"></a><p>
         This read-only property returns the user name used for
         connecting to the MySQL server.
       </p><p>
         Returns a string.
-      </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlconnectionpool"></a>10.3 pooling.MySQLConnectionPool Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-constructor">10.3.1 pooling.MySQLConnectionPool Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-add-connection">10.3.2 MySQLConnectionPool.add_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-get-connection">10.3.3 MySQLConnectionPool.get_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-set-config">10.3.4 MySQLConnectionPool.set_config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-pool-name">10.3.5 MySQLConnectionPool.pool_name Property</a></span></dt></dl></div><a class="indexterm" name="id4235"></a><a class="indexterm" name="id4237"></a><p>
+      </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlconnectionpool"></a>10.3 pooling.MySQLConnectionPool Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-constructor">10.3.1 pooling.MySQLConnectionPool Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-add-connection">10.3.2 MySQLConnectionPool.add_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-get-connection">10.3.3 MySQLConnectionPool.get_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-set-config">10.3.4 MySQLConnectionPool.set_config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-pool-name">10.3.5 MySQLConnectionPool.pool_name Property</a></span></dt></dl></div><a class="indexterm" name="id4221"></a><a class="indexterm" name="id4223"></a><p>
       This class provides for the instantiation and management of
       connection pools.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-constructor"></a>10.3.1 pooling.MySQLConnectionPool Constructor</h3></div></div></div><a class="indexterm" name="id4242"></a><a class="indexterm" name="id4244"></a><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-constructor"></a>10.3.1 pooling.MySQLConnectionPool Constructor</h3></div></div></div><a class="indexterm" name="id4228"></a><a class="indexterm" name="id4230"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">MySQLConnectionPool(pool_name=None,
                     pool_size=5,
@@ -4736,7 +4681,7 @@ print(cnx.use_unicode)
 cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = "mypool",
                                                       pool_size = 3,
                                                       **dbconfig)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-add-connection"></a>10.3.2 MySQLConnectionPool.add_connection() Method</h3></div></div></div><a class="indexterm" name="id4275"></a><a class="indexterm" name="id4277"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-add-connection"></a>10.3.2 MySQLConnectionPool.add_connection() Method</h3></div></div></div><a class="indexterm" name="id4261"></a><a class="indexterm" name="id4263"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnxpool.add_connection(cnx = None)
 </pre><p>
@@ -4754,7 +4699,7 @@ cnxpool = mysql.connector.pooling.MySQLC
         Example:
       </p><pre data-lang="python" class="programlisting">cnxpool.add_connection()    # add new connection to pool
 cnxpool.add_connection(cnx) # add existing connection to pool
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-get-connection"></a>10.3.3 MySQLConnectionPool.get_connection() Method</h3></div></div></div><a class="indexterm" name="id4294"></a><a class="indexterm" name="id4296"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-get-connection"></a>10.3.3 MySQLConnectionPool.get_connection() Method</h3></div></div></div><a class="indexterm" name="id4280"></a><a class="indexterm" name="id4282"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnxpool.get_connection()
 </pre><p>
@@ -4763,7 +4708,7 @@ cnxpool.add_connection(cnx) # add existi
       </p><p>
         Example:
       </p><pre data-lang="python" class="programlisting">cnx = cnxpool.get_connection()
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-set-config"></a>10.3.4 MySQLConnectionPool.set_config() Method</h3></div></div></div><a class="indexterm" name="id4306"></a><a class="indexterm" name="id4308"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-set-config"></a>10.3.4 MySQLConnectionPool.set_config() Method</h3></div></div></div><a class="indexterm" name="id4292"></a><a class="indexterm" name="id4294"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnxpool.set_config(**kwargs)
 </pre><p>
@@ -4787,7 +4732,7 @@ cnxpool.add_connection(cnx) # add existi
 }
 
 cnxpool.set_config(**dbconfig)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-pool-name"></a>10.3.5 MySQLConnectionPool.pool_name Property</h3></div></div></div><a class="indexterm" name="id4323"></a><a class="indexterm" name="id4325"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-pool-name"></a>10.3.5 MySQLConnectionPool.pool_name Property</h3></div></div></div><a class="indexterm" name="id4309"></a><a class="indexterm" name="id4311"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnxpool.pool_name
 </pre><p>
@@ -4795,7 +4740,7 @@ cnxpool.set_config(**dbconfig)
       </p><p>
         Example:
       </p><pre data-lang="python" class="programlisting">name = cnxpool.pool_name
-</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-pooledmysqlconnection"></a>10.4 pooling.PooledMySQLConnection Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-constructor">10.4.1 pooling.PooledMySQLConnection Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-close">10.4.2 PooledMySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-config">10.4.3 PooledMySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-pool-name">10.4.4 PooledMySQLConnection.pool_name Property</a></span></dt></dl></div><a class="indexterm" name="id4334"></a><a class="indexterm" name="id4336"></a><p>
+</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-pooledmysqlconnection"></a>10.4 pooling.PooledMySQLConnection Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-constructor">10.4.1 pooling.PooledMySQLConnection Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-close">10.4.2 PooledMySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-config">10.4.3 PooledMySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-pool-name">10.4.4 PooledMySQLConnection.pool_name Property</a></span></dt></dl></div><a class="indexterm" name="id4320"></a><a class="indexterm" name="id4322"></a><p>
       This class is used by <code class="literal">MySQLConnectionPool</code> to
       return a pooled connection instance. It is also the class used for
       connections obtained with calls to the
@@ -4820,7 +4765,7 @@ cnxpool.set_config(**dbconfig)
         </p></li><li class="listitem"><p>
           A pooled connection has a <code class="literal">pool_name</code>
           property that returns the pool name.
-        </p></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-constructor"></a>10.4.1 pooling.PooledMySQLConnection Constructor</h3></div></div></div><a class="indexterm" name="id4359"></a><a class="indexterm" name="id4361"></a><p>
+        </p></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-constructor"></a>10.4.1 pooling.PooledMySQLConnection Constructor</h3></div></div></div><a class="indexterm" name="id4345"></a><a class="indexterm" name="id4347"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">PooledMySQLConnection(cnxpool, cnx)
 </pre><p>
@@ -4838,7 +4783,7 @@ cnxpool.set_config(**dbconfig)
           </p></li></ul></div><p>
         Example:
       </p><pre data-lang="python" class="programlisting">pcnx = mysql.connector.pooling.PooledMySQLConnection(cnxpool, cnx)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-close"></a>10.4.2 PooledMySQLConnection.close() Method</h3></div></div></div><a class="indexterm" name="id4381"></a><a class="indexterm" name="id4383"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-close"></a>10.4.2 PooledMySQLConnection.close() Method</h3></div></div></div><a class="indexterm" name="id4367"></a><a class="indexterm" name="id4369"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.close()
 </pre><p>
@@ -4852,11 +4797,11 @@ cnxpool.set_config(**dbconfig)
         connection is closed and reopened with the new configuration
         before being returned from the pool again in response to a
         connection request.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-config"></a>10.4.3 PooledMySQLConnection.config() Method</h3></div></div></div><a class="indexterm" name="id4393"></a><a class="indexterm" name="id4395"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-config"></a>10.4.3 PooledMySQLConnection.config() Method</h3></div></div></div><a class="indexterm" name="id4379"></a><a class="indexterm" name="id4381"></a><p>
         For pooled connections, the <code class="literal">config()</code> method
         raises a <code class="literal">PoolError</code> exception. Configuration
         for pooled connections should be done using the pool object.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-pool-name"></a>10.4.4 PooledMySQLConnection.pool_name Property</h3></div></div></div><a class="indexterm" name="id4402"></a><a class="indexterm" name="id4404"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-pool-name"></a>10.4.4 PooledMySQLConnection.pool_name Property</h3></div></div></div><a class="indexterm" name="id4388"></a><a class="indexterm" name="id4390"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.pool_name
 </pre><p>
@@ -4866,7 +4811,7 @@ cnxpool.set_config(**dbconfig)
         Example:
       </p><pre data-lang="python" class="programlisting">cnx = cnxpool.get_connection()
 name = cnx.pool_name
-</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlcursor"></a>10.5 cursor.MySQLCursor Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlcursor-constructor">10.5.1 cursor.MySQLCursor Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-add-attribute">10.5.2 MySQLCursor.add_attribute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-clear-attributes">10.5.3 MySQLCursor.clear_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-get-attributes">10.5.4 MySQLCursor.get_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-callproc">10.5.5 MySQLCursor.callproc() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-close">10.5.6 MySQLCursor.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-execute">10.5.7 MySQLCursor.execute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-executemany">10.5.8 MySQLCursor.executemany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchall">10.5.9 MySQLCursor.fetchall() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchmany">10.5.10 MySQLCursor.fetchmany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchone">10.5.11 MySQLCursor.fetchone() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-nextset">10.5.12 MySQLCursor.nextset() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchsets">10.5.13 MySQLCursor.fetchsets() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchwarnings">10.5.14 MySQLCursor.fetchwarnings() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-stored-results">10.5.15 MySQLCursor.stored_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-column-names">10.5.16 MySQLCursor.column_names Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-description">10.5.17 MySQLCursor.description Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-warnings">10.5.18 MySQLCursor.warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-lastrowid">10.5.19 MySQLCursor.lastrowid Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-rowcount">10.5.20 MySQLCursor.rowcount Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-statement">10.5.21 MySQLCursor.statement Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-with-rows">10.5.22 MySQLCursor.with_rows Property</a></span></dt></dl></div><a class="indexterm" name="id4413"></a><a class="indexterm" name="id4415"></a><p>
+</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlcursor"></a>10.5 cursor.MySQLCursor Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlcursor-constructor">10.5.1 cursor.MySQLCursor Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-add-attribute">10.5.2 MySQLCursor.add_attribute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-clear-attributes">10.5.3 MySQLCursor.clear_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-get-attributes">10.5.4 MySQLCursor.get_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-callproc">10.5.5 MySQLCursor.callproc() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-close">10.5.6 MySQLCursor.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-execute">10.5.7 MySQLCursor.execute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-executemany">10.5.8 MySQLCursor.executemany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchall">10.5.9 MySQLCursor.fetchall() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchmany">10.5.10 MySQLCursor.fetchmany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchone">10.5.11 MySQLCursor.fetchone() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-nextset">10.5.12 MySQLCursor.nextset() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchsets">10.5.13 MySQLCursor.fetchsets() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchwarnings">10.5.14 MySQLCursor.fetchwarnings() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-stored-results">10.5.15 MySQLCursor.stored_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-column-names">10.5.16 MySQLCursor.column_names Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-description">10.5.17 MySQLCursor.description Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-warnings">10.5.18 MySQLCursor.warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-lastrowid">10.5.19 MySQLCursor.lastrowid Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-rowcount">10.5.20 MySQLCursor.rowcount Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-statement">10.5.21 MySQLCursor.statement Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-with-rows">10.5.22 MySQLCursor.with_rows Property</a></span></dt></dl></div><a class="indexterm" name="id4399"></a><a class="indexterm" name="id4401"></a><p>
       The <code class="literal">MySQLCursor</code> class instantiates objects that
       can execute operations such as SQL statements. Cursor objects
       interact with the MySQL server using a
@@ -4908,7 +4853,7 @@ cursor = cnx.cursor()
           executing prepared statements. See
           <a class="xref" href="#connector-python-api-mysqlcursorprepared" title="10.6.5 cursor.MySQLCursorPrepared Class">Section 10.6.5, “cursor.MySQLCursorPrepared Class”</a>.
         </p><pre data-lang="python" class="programlisting">cursor = cnx.cursor(prepared=True)
-</pre></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-constructor"></a>10.5.1 cursor.MySQLCursor Constructor</h3></div></div></div><a class="indexterm" name="id4455"></a><a class="indexterm" name="id4457"></a><p>
+</pre></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-constructor"></a>10.5.1 cursor.MySQLCursor Constructor</h3></div></div></div><a class="indexterm" name="id4441"></a><a class="indexterm" name="id4443"></a><p>
         In most cases, the <code class="literal">MySQLConnection</code>
         <a class="link" href="#connector-python-api-mysqlconnection-cursor" title="10.2.6 MySQLConnection.cursor() Method"><code class="literal">cursor()</code></a>
         method is used to instantiate a <code class="literal">MySQLCursor</code>
@@ -4931,7 +4876,7 @@ cursor = MySQLCursor(cnx)
         created but its
         <a class="link" href="#connector-python-api-mysqlcursor-execute" title="10.5.7 MySQLCursor.execute() Method"><code class="literal">execute()</code></a>
         method raises an exception.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-add-attribute"></a>10.5.2 MySQLCursor.add_attribute() Method</h3></div></div></div><a class="indexterm" name="id4475"></a><a class="indexterm" name="id4477"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-add-attribute"></a>10.5.2 MySQLCursor.add_attribute() Method</h3></div></div></div><a class="indexterm" name="id4461"></a><a class="indexterm" name="id4463"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.add_attribute(name, value)
 </pre><p>
@@ -4986,7 +4931,7 @@ cursor = MySQLCursor(cnx)
     # The query above did not send any attibute.
 </pre><p>
         This method was added in Connector/Python 8.0.26.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-clear-attributes"></a>10.5.3 MySQLCursor.clear_attributes() Method</h3></div></div></div><a class="indexterm" name="id4494"></a><a class="indexterm" name="id4496"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-clear-attributes"></a>10.5.3 MySQLCursor.clear_attributes() Method</h3></div></div></div><a class="indexterm" name="id4480"></a><a class="indexterm" name="id4482"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.clear_attributes()
 </pre><p>
@@ -4995,7 +4940,7 @@ cursor = MySQLCursor(cnx)
         <a class="xref" href="#connector-python-api-mysqlcursor-add-attribute" title="10.5.2 MySQLCursor.add_attribute() Method">Section 10.5.2, “MySQLCursor.add_attribute() Method”</a>.
       </p><p>
         This method was added in Connector/Python 8.0.26.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-get-attributes"></a>10.5.4 MySQLCursor.get_attributes() Method</h3></div></div></div><a class="indexterm" name="id4505"></a><a class="indexterm" name="id4507"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-get-attributes"></a>10.5.4 MySQLCursor.get_attributes() Method</h3></div></div></div><a class="indexterm" name="id4491"></a><a class="indexterm" name="id4493"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.get_attributes()
 </pre><p>
@@ -5003,7 +4948,7 @@ cursor = MySQLCursor(cnx)
         <a class="xref" href="#connector-python-api-mysqlcursor-add-attribute" title="10.5.2 MySQLCursor.add_attribute() Method">Section 10.5.2, “MySQLCursor.add_attribute() Method”</a>.
       </p><p>
         This method was added in Connector/Python 8.0.26.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-callproc"></a>10.5.5 MySQLCursor.callproc() Method</h3></div></div></div><a class="indexterm" name="id4516"></a><a class="indexterm" name="id4518"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-callproc"></a>10.5.5 MySQLCursor.callproc() Method</h3></div></div></div><a class="indexterm" name="id4502"></a><a class="indexterm" name="id4504"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">result_args = cursor.callproc(proc_name, args=())
 </pre><p>
@@ -5050,7 +4995,7 @@ END;
       </p><pre data-lang="python" class="programlisting">args = ('ham', 'eggs', (0, 'CHAR'))
 result_args = cursor.callproc('sp1', args)
 print(result_args[2])
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-close"></a>10.5.6 MySQLCursor.close() Method</h3></div></div></div><a class="indexterm" name="id4543"></a><a class="indexterm" name="id4545"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-close"></a>10.5.6 MySQLCursor.close() Method</h3></div></div></div><a class="indexterm" name="id4529"></a><a class="indexterm" name="id4531"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.close()
 </pre><p>
@@ -5058,7 +5003,7 @@ print(result_args[2])
         This method closes the cursor, resets all results, and ensures
         that the cursor object has no reference to its original
         connection object.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-execute"></a>10.5.7 MySQLCursor.execute() Method</h3></div></div></div><a class="indexterm" name="id4553"></a><a class="indexterm" name="id4555"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-execute"></a>10.5.7 MySQLCursor.execute() Method</h3></div></div></div><a class="indexterm" name="id4539"></a><a class="indexterm" name="id4541"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.execute(operation, params=None)
 iterator = cursor.execute(operation, params=None)
@@ -5107,7 +5052,7 @@ cursor.execute(select_stmt, { 'emp_no':
         generated by the operation are available through the
         <a class="link" href="#connector-python-api-mysqlcursor-fetchwarnings" title="10.5.14 MySQLCursor.fetchwarnings() Method">MySQLCursor.fetchwarnings()</a>
         method.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-executemany"></a>10.5.8 MySQLCursor.executemany() Method</h3></div></div></div><a class="indexterm" name="id4586"></a><a class="indexterm" name="id4588"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-executemany"></a>10.5.8 MySQLCursor.executemany() Method</h3></div></div></div><a class="indexterm" name="id4572"></a><a class="indexterm" name="id4574"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.executemany(operation, seq_of_params)
 </pre><p>
@@ -5148,7 +5093,7 @@ VALUES ('Jane', '2005-02-12'), ('Joe', '
         <code class="literal">operation</code> argument. Doing so raises an
         <code class="literal">InternalError</code> exception. Consider using
         <a class="xref" href="#connector-python-multi" title="9.3 Executing Multiple Statements">Section 9.3, “Executing Multiple Statements”</a> instead.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchall"></a>10.5.9 MySQLCursor.fetchall() Method</h3></div></div></div><a class="indexterm" name="id4615"></a><a class="indexterm" name="id4617"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchall"></a>10.5.9 MySQLCursor.fetchall() Method</h3></div></div></div><a class="indexterm" name="id4601"></a><a class="indexterm" name="id4603"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">rows = cursor.fetchall()
 </pre><p>
@@ -5164,7 +5109,7 @@ VALUES ('Jane', '2005-02-12'), ('Joe', '
 </pre><p>
         You must fetch all rows for the current query before executing
         new statements using the same connection.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchmany"></a>10.5.10 MySQLCursor.fetchmany() Method</h3></div></div></div><a class="indexterm" name="id4627"></a><a class="indexterm" name="id4629"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchmany"></a>10.5.10 MySQLCursor.fetchmany() Method</h3></div></div></div><a class="indexterm" name="id4613"></a><a class="indexterm" name="id4615"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">rows = cursor.fetchmany(size=1)
 </pre><p>
@@ -5178,7 +5123,7 @@ VALUES ('Jane', '2005-02-12'), ('Joe', '
       </p><p>
         You must fetch all rows for the current query before executing
         new statements using the same connection.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchone"></a>10.5.11 MySQLCursor.fetchone() Method</h3></div></div></div><a class="indexterm" name="id4639"></a><a class="indexterm" name="id4641"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchone"></a>10.5.11 MySQLCursor.fetchone() Method</h3></div></div></div><a class="indexterm" name="id4625"></a><a class="indexterm" name="id4627"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">row = cursor.fetchone()
 </pre><p>
@@ -5213,7 +5158,7 @@ for row in cursor:
 </pre><p>
         You must fetch all rows for the current query before executing
         new statements using the same connection.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-nextset"></a>10.5.12 MySQLCursor.nextset() Method</h3></div></div></div><a class="indexterm" name="id4659"></a><a class="indexterm" name="id4661"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-nextset"></a>10.5.12 MySQLCursor.nextset() Method</h3></div></div></div><a class="indexterm" name="id4645"></a><a class="indexterm" name="id4647"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">row = cursor.nextset()
 </pre><p>
@@ -5242,7 +5187,7 @@ with cnx.cursor() as cur:
         # do something with result set
 </pre><p>
         This method was added in Connector/Python 9.2.0.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchsets"></a>10.5.13 MySQLCursor.fetchsets() Method</h3></div></div></div><a class="indexterm" name="id4673"></a><a class="indexterm" name="id4675"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchsets"></a>10.5.13 MySQLCursor.fetchsets() Method</h3></div></div></div><a class="indexterm" name="id4659"></a><a class="indexterm" name="id4661"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">for statement, result_set in cursor.fetchsets():
     # do something with statement and/or result set
@@ -5265,7 +5210,7 @@ with cnx.cursor() as cur:
             # do something with statement and/or result set
 </pre><p>
         This method was added in Connector/Python 9.2.0.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchwarnings"></a>10.5.14 MySQLCursor.fetchwarnings() Method</h3></div></div></div><a class="indexterm" name="id4685"></a><a class="indexterm" name="id4687"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchwarnings"></a>10.5.14 MySQLCursor.fetchwarnings() Method</h3></div></div></div><a class="indexterm" name="id4671"></a><a class="indexterm" name="id4673"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlcursor-warnings" title="10.5.18 MySQLCursor.warnings Property">Section 10.5.18, “MySQLCursor.warnings Property”</a>
@@ -5294,7 +5239,7 @@ with cnx.cursor() as cur:
         instead, using the connection's
         <a class="link" href="#connector-python-api-mysqlconnection-raise-on-warnings" title="10.2.47 MySQLConnection.raise_on_warnings Property"><code class="literal">raise_on_warnings</code></a>
         property.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-stored-results"></a>10.5.15 MySQLCursor.stored_results() Method</h3></div></div></div><a class="indexterm" name="id4707"></a><a class="indexterm" name="id4709"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-stored-results"></a>10.5.15 MySQLCursor.stored_results() Method</h3></div></div></div><a class="indexterm" name="id4693"></a><a class="indexterm" name="id4695"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0.
         </p></div><p>
         Syntax:
@@ -5318,7 +5263,7 @@ with cnx.cursor() as cur:
 ...
 [(1,)]
 [(2,)]
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-column-names"></a>10.5.16 MySQLCursor.column_names Property</h3></div></div></div><a class="indexterm" name="id4723"></a><a class="indexterm" name="id4725"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-column-names"></a>10.5.16 MySQLCursor.column_names Property</h3></div></div></div><a class="indexterm" name="id4709"></a><a class="indexterm" name="id4711"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">sequence = cursor.column_names
 </pre><p>
@@ -5336,7 +5281,7 @@ print("{last_name}, {first_name}: {hire_
         Alternatively, as of Connector/Python 2.0.0, you can fetch rows as
         dictionaries directly; see
         <a class="xref" href="#connector-python-api-mysqlcursordict" title="10.6.3 cursor.MySQLCursorDict Class">Section 10.6.3, “cursor.MySQLCursorDict Class”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-description"></a>10.5.17 MySQLCursor.description Property</h3></div></div></div><a class="indexterm" name="id4737"></a><a class="indexterm" name="id4739"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-description"></a>10.5.17 MySQLCursor.description Property</h3></div></div></div><a class="indexterm" name="id4723"></a><a class="indexterm" name="id4725"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">tuples = cursor.description
 </pre><p>
@@ -5391,7 +5336,7 @@ Column 3:
         interpret it, do this:
       </p><pre data-lang="python" class="programlisting">&gt;&gt;&gt; from mysql.connector import FieldFlag
 &gt;&gt;&gt; FieldFlag.desc
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-warnings"></a>10.5.18 MySQLCursor.warnings Property</h3></div></div></div><a class="indexterm" name="id4756"></a><a class="indexterm" name="id4758"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-warnings"></a>10.5.18 MySQLCursor.warnings Property</h3></div></div></div><a class="indexterm" name="id4742"></a><a class="indexterm" name="id4744"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">tuples = cursor.warnings
 </pre><p>
@@ -5415,7 +5360,7 @@ Column 3:
         instead, using the connection's
         <a class="link" href="#connector-python-api-mysqlconnection-raise-on-warnings" title="10.2.47 MySQLConnection.raise_on_warnings Property"><code class="literal">raise_on_warnings</code></a>
         property.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-lastrowid"></a>10.5.19 MySQLCursor.lastrowid Property</h3></div></div></div><a class="indexterm" name="id4774"></a><a class="indexterm" name="id4776"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-lastrowid"></a>10.5.19 MySQLCursor.lastrowid Property</h3></div></div></div><a class="indexterm" name="id4760"></a><a class="indexterm" name="id4762"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">id = cursor.lastrowid
 </pre><p>
@@ -5435,7 +5380,7 @@ Column 3:
         The <code class="literal">lastrowid</code> property is like the
         <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-insert-id.html" target="_top"><code class="literal">mysql_insert_id()</code></a> C API
         function; see <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-insert-id.html" target="_top">mysql_insert_id()</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-rowcount"></a>10.5.20 MySQLCursor.rowcount Property</h3></div></div></div><a class="indexterm" name="id4800"></a><a class="indexterm" name="id4802"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-rowcount"></a>10.5.20 MySQLCursor.rowcount Property</h3></div></div></div><a class="indexterm" name="id4786"></a><a class="indexterm" name="id4788"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">count = cursor.rowcount
 </pre><p>
@@ -5454,7 +5399,7 @@ Column 3:
         The <code class="literal">rowcount</code> property is like the
         <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-affected-rows.html" target="_top"><code class="literal">mysql_affected_rows()</code></a> C API
         function; see <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-affected-rows.html" target="_top">mysql_affected_rows()</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-statement"></a>10.5.21 MySQLCursor.statement Property</h3></div></div></div><a class="indexterm" name="id4822"></a><a class="indexterm" name="id4824"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-statement"></a>10.5.21 MySQLCursor.statement Property</h3></div></div></div><a class="indexterm" name="id4808"></a><a class="indexterm" name="id4810"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">str = cursor.statement
 </pre><p>
@@ -5471,7 +5416,7 @@ Column 3:
         from the individual statements. The <code class="literal">statement</code>
         property for this iterator shows statement strings for the
         individual statements.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-with-rows"></a>10.5.22 MySQLCursor.with_rows Property</h3></div></div></div><a class="indexterm" name="id4838"></a><a class="indexterm" name="id4840"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-with-rows"></a>10.5.22 MySQLCursor.with_rows Property</h3></div></div></div><a class="indexterm" name="id4824"></a><a class="indexterm" name="id4826"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">boolean = cursor.with_rows
 </pre><p>
@@ -5495,11 +5440,11 @@ for result in cursor.execute(operation):
     result.fetchall()
   else:
     print("Number of affected rows: {}".format(result.rowcount))
-</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cursor-subclasses"></a>10.6 Subclasses cursor.MySQLCursor</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffered">10.6.1 cursor.MySQLCursorBuffered Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorraw">10.6.2 cursor.MySQLCursorRaw Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursordict">10.6.3 cursor.MySQLCursorDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffereddict">10.6.4 cursor.MySQLCursorBufferedDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorprepared">10.6.5 cursor.MySQLCursorPrepared Class</a></span></dt></dl></div><a class="indexterm" name="id4856"></a><a class="indexterm" name="id4858"></a><p>
+</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cursor-subclasses"></a>10.6 Subclasses cursor.MySQLCursor</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffered">10.6.1 cursor.MySQLCursorBuffered Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorraw">10.6.2 cursor.MySQLCursorRaw Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursordict">10.6.3 cursor.MySQLCursorDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffereddict">10.6.4 cursor.MySQLCursorBufferedDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorprepared">10.6.5 cursor.MySQLCursorPrepared Class</a></span></dt></dl></div><a class="indexterm" name="id4842"></a><a class="indexterm" name="id4844"></a><p>
       The cursor classes described in the following sections inherit
       from the <code class="literal">MySQLCursor</code> class, which is described
       in <a class="xref" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class">Section 10.5, “cursor.MySQLCursor Class”</a>.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorbuffered"></a>10.6.1 cursor.MySQLCursorBuffered Class</h3></div></div></div><a class="indexterm" name="id4865"></a><a class="indexterm" name="id4867"></a><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorbuffered"></a>10.6.1 cursor.MySQLCursorBuffered Class</h3></div></div></div><a class="indexterm" name="id4851"></a><a class="indexterm" name="id4853"></a><p>
         The <code class="literal">MySQLCursorBuffered</code> class inherits from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
       </p><p>
@@ -5544,7 +5489,7 @@ cnx2 = mysql.connector.connect(buffered=
 </pre><p>
         For a practical use case, see
         <a class="xref" href="#connector-python-tutorial-cursorbuffered" title="6.1 Tutorial: Raise Employee's Salary Using a Buffered Cursor">Section 6.1, “Tutorial: Raise Employee's Salary Using a Buffered Cursor”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorraw"></a>10.6.2 cursor.MySQLCursorRaw Class</h3></div></div></div><a class="indexterm" name="id4893"></a><a class="indexterm" name="id4895"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorraw"></a>10.6.2 cursor.MySQLCursorRaw Class</h3></div></div></div><a class="indexterm" name="id4879"></a><a class="indexterm" name="id4881"></a><p>
         The <code class="literal">MySQLCursorRaw</code> class inherits from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
       </p><p>
@@ -5571,7 +5516,7 @@ cursor = cnx.cursor(raw=True)
 
 # All cursors created from cnx2 will be raw by default
 cnx2 = mysql.connector.connect(raw=True)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursordict"></a>10.6.3 cursor.MySQLCursorDict Class</h3></div></div></div><a class="indexterm" name="id4913"></a><a class="indexterm" name="id4915"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursordict"></a>10.6.3 cursor.MySQLCursorDict Class</h3></div></div></div><a class="indexterm" name="id4899"></a><a class="indexterm" name="id4901"></a><p>
         The <code class="literal">MySQLCursorDict</code> class inherits from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
         This class is available as of Connector/Python 2.0.0.
@@ -5605,7 +5550,7 @@ for row in cursor:
 print("Countries in Europe with population:")
 for row in cursor:
     print("* {Name}: {Population}".format(**row))
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorbuffereddict"></a>10.6.4 cursor.MySQLCursorBufferedDict Class</h3></div></div></div><a class="indexterm" name="id4932"></a><a class="indexterm" name="id4934"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorbuffereddict"></a>10.6.4 cursor.MySQLCursorBufferedDict Class</h3></div></div></div><a class="indexterm" name="id4918"></a><a class="indexterm" name="id4920"></a><p>
         The <code class="literal">MySQLCursorBufferedDict</code> class inherits
         from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
@@ -5622,7 +5567,7 @@ for row in cursor:
         <code class="literal">buffered</code> argument when instantiating a new
         dictionary cursor:
       </p><pre data-lang="python" class="programlisting">cursor = cnx.cursor(dictionary=True, buffered=True)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorprepared"></a>10.6.5 cursor.MySQLCursorPrepared Class</h3></div></div></div><a class="indexterm" name="id4950"></a><a class="indexterm" name="id4952"></a><a class="indexterm" name="id4955"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorprepared"></a>10.6.5 cursor.MySQLCursorPrepared Class</h3></div></div></div><a class="indexterm" name="id4936"></a><a class="indexterm" name="id4938"></a><a class="indexterm" name="id4941"></a><p>
         The <code class="literal">MySQLCursorPrepared</code> class inherits from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
       </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
@@ -5715,7 +5660,7 @@ cursor.execute(stmt, (10,))
         To use multiple prepared statements simultaneously, instantiate
         multiple cursors from the <code class="literal">MySQLCursorPrepared</code>
         class.
-      </p><a class="indexterm" name="id5026"></a><p>
+      </p><a class="indexterm" name="id5012"></a><p>
         The MySQL client/server protocol has an option to send prepared
         statement parameters via the
         <code class="literal">COM_STMT_SEND_LONG_DATA</code> command. To use this
@@ -5727,7 +5672,7 @@ cursor.execute(stmt, (10,))
 
 cur = cnx.cursor(prepared=True)
 cur.execute("SELECT (%s)", (io.BytesIO(bytes("A", "latin1")), ))
-</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-clientflag"></a>10.7 constants.ClientFlag Class</h2></div></div></div><a class="indexterm" name="id5034"></a><a class="indexterm" name="id5036"></a><p>
+</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-clientflag"></a>10.7 constants.ClientFlag Class</h2></div></div></div><a class="indexterm" name="id5020"></a><a class="indexterm" name="id5022"></a><p>
       This class provides constants defining MySQL client flags that can
       be used when the connection is established to configure the
       session. The <code class="literal">ClientFlag</code> class is available when
@@ -5742,7 +5687,7 @@ cur.execute("SELECT (%s)", (io.BytesIO(b
       argument</a> <code class="literal">client_flag</code>.
     </p><p>
       The <code class="literal">ClientFlag</code> class cannot be instantiated.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-fieldtype"></a>10.8 constants.FieldType Class</h2></div></div></div><a class="indexterm" name="id5050"></a><a class="indexterm" name="id5052"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-fieldtype"></a>10.8 constants.FieldType Class</h2></div></div></div><a class="indexterm" name="id5036"></a><a class="indexterm" name="id5038"></a><p>
       This class provides all supported MySQL field or data types. They
       can be useful when dealing with raw data or defining your own
       converters. The field type is stored with every cursor in the
@@ -5772,7 +5717,7 @@ cursor.close()
 cnx.close()
 </pre><p>
       The <code class="literal">FieldType</code> class cannot be instantiated.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-sqlmode"></a>10.9 constants.SQLMode Class</h2></div></div></div><a class="indexterm" name="id5061"></a><a class="indexterm" name="id5063"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-sqlmode"></a>10.9 constants.SQLMode Class</h2></div></div></div><a class="indexterm" name="id5047"></a><a class="indexterm" name="id5049"></a><p>
       This class provides all known MySQL
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html" target="_top">Server SQL Modes</a>. It is mostly
       used when setting the SQL modes at connection time using the
@@ -5780,13 +5725,13 @@ cnx.close()
       <a class="xref" href="#connector-python-api-mysqlconnection-sql-mode" title="10.2.52 MySQLConnection.sql_mode Property">Section 10.2.52, “MySQLConnection.sql_mode Property”</a>.
     </p><p>
       The <code class="literal">SQLMode</code> class cannot be instantiated.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-characterset"></a>10.10 constants.CharacterSet Class</h2></div></div></div><a class="indexterm" name="id5073"></a><a class="indexterm" name="id5075"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-characterset"></a>10.10 constants.CharacterSet Class</h2></div></div></div><a class="indexterm" name="id5059"></a><a class="indexterm" name="id5061"></a><p>
       This class provides all known MySQL characters sets and their
       default collations. For examples, see
       <a class="xref" href="#connector-python-api-mysqlconnection-set-charset-collation" title="10.2.31 MySQLConnection.set_charset_collation() Method">Section 10.2.31, “MySQLConnection.set_charset_collation() Method”</a>.
     </p><p>
       The <code class="literal">CharacterSet</code> class cannot be instantiated.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-refreshoption"></a>10.11 constants.RefreshOption Class</h2></div></div></div><a class="indexterm" name="id5083"></a><a class="indexterm" name="id5085"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-refreshoption"></a>10.11 constants.RefreshOption Class</h2></div></div></div><a class="indexterm" name="id5069"></a><a class="indexterm" name="id5071"></a><p>
       This class performs various flush operations.
     </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
           <code class="literal">RefreshOption.GRANT</code>
@@ -5942,7 +5887,7 @@ cnx.close()
         </tr><tr>
           <td><code class="literal">HY</code></td>
           <td><code class="literal">DatabaseError</code></td>
-        </tr></tbody></table></div></div><br class="table-break"><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errorcode"></a>10.12.1 errorcode Module</h3></div></div></div><a class="indexterm" name="id5309"></a><a class="indexterm" name="id5311"></a><p>
+        </tr></tbody></table></div></div><br class="table-break"><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errorcode"></a>10.12.1 errorcode Module</h3></div></div></div><a class="indexterm" name="id5295"></a><a class="indexterm" name="id5297"></a><p>
         This module contains both MySQL server and client error codes
         defined as module attributes with the error number as value.
         Using error codes instead of error numbers could make reading
@@ -5953,7 +5898,7 @@ cnx.close()
 1051</pre><p>
         For more information about MySQL errors, see
         <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/error-handling.html" target="_top">Error Messages and Common Problems</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-error"></a>10.12.2 errors.Error Exception</h3></div></div></div><a class="indexterm" name="id5319"></a><a class="indexterm" name="id5321"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-error"></a>10.12.2 errors.Error Exception</h3></div></div></div><a class="indexterm" name="id5305"></a><a class="indexterm" name="id5307"></a><p>
         This exception is the base class for all other exceptions in the
         <code class="literal">errors</code> module. It can be used to catch all
         errors in a single <code class="literal">except</code> statement.
@@ -6044,7 +5989,7 @@ except mysql.connector.Error as e:
 </pre><p>
         <code class="literal">errors.Error</code> is a subclass of the Python
         <code class="literal">StandardError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-dataerror"></a>10.12.3 errors.DataError Exception</h3></div></div></div><a class="indexterm" name="id5359"></a><a class="indexterm" name="id5361"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-dataerror"></a>10.12.3 errors.DataError Exception</h3></div></div></div><a class="indexterm" name="id5345"></a><a class="indexterm" name="id5347"></a><p>
         This exception is raised when there were problems with the data.
         Examples are a column set to <code class="literal">NULL</code> that cannot
         be <code class="literal">NULL</code>, out-of-range values for a column,
@@ -6053,13 +5998,13 @@ except mysql.connector.Error as e:
       </p><p>
         <code class="literal">errors.DataError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-databaseerror"></a>10.12.4 errors.DatabaseError Exception</h3></div></div></div><a class="indexterm" name="id5371"></a><a class="indexterm" name="id5373"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-databaseerror"></a>10.12.4 errors.DatabaseError Exception</h3></div></div></div><a class="indexterm" name="id5357"></a><a class="indexterm" name="id5359"></a><p>
         This exception is the default for any MySQL error which does not
         fit the other exceptions.
       </p><p>
         <code class="literal">errors.DatabaseError</code> is a subclass of
         <code class="literal">errors.Error</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-integrityerror"></a>10.12.5 errors.IntegrityError Exception</h3></div></div></div><a class="indexterm" name="id5381"></a><a class="indexterm" name="id5383"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-integrityerror"></a>10.12.5 errors.IntegrityError Exception</h3></div></div></div><a class="indexterm" name="id5367"></a><a class="indexterm" name="id5369"></a><p>
         This exception is raised when the relational integrity of the
         data is affected. For example, a duplicate key was inserted or a
         foreign key constraint would fail.
@@ -6075,19 +6020,19 @@ except mysql.connector.IntegrityError as
 </pre><p>
         <code class="literal">errors.IntegrityError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-interfaceerror"></a>10.12.6 errors.InterfaceError Exception</h3></div></div></div><a class="indexterm" name="id5393"></a><a class="indexterm" name="id5395"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-interfaceerror"></a>10.12.6 errors.InterfaceError Exception</h3></div></div></div><a class="indexterm" name="id5379"></a><a class="indexterm" name="id5381"></a><p>
         This exception is raised for errors originating from Connector/Python
         itself, not related to the MySQL server.
       </p><p>
         <code class="literal">errors.InterfaceError</code> is a subclass of
         <code class="literal">errors.Error</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-internalerror"></a>10.12.7 errors.InternalError Exception</h3></div></div></div><a class="indexterm" name="id5403"></a><a class="indexterm" name="id5405"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-internalerror"></a>10.12.7 errors.InternalError Exception</h3></div></div></div><a class="indexterm" name="id5389"></a><a class="indexterm" name="id5391"></a><p>
         This exception is raised when the MySQL server encounters an
         internal error, for example, when a deadlock occurred.
       </p><p>
         <code class="literal">errors.InternalError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-notsupportederror"></a>10.12.8 errors.NotSupportedError Exception</h3></div></div></div><a class="indexterm" name="id5413"></a><a class="indexterm" name="id5415"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-notsupportederror"></a>10.12.8 errors.NotSupportedError Exception</h3></div></div></div><a class="indexterm" name="id5399"></a><a class="indexterm" name="id5401"></a><p>
         This exception is raised when some feature was used that is not
         supported by the version of MySQL that returned the error. It is
         also raised when using functions or statements that are not
@@ -6095,7 +6040,7 @@ except mysql.connector.IntegrityError as
       </p><p>
         <code class="literal">errors.NotSupportedError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-operationalerror"></a>10.12.9 errors.OperationalError Exception</h3></div></div></div><a class="indexterm" name="id5423"></a><a class="indexterm" name="id5425"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-operationalerror"></a>10.12.9 errors.OperationalError Exception</h3></div></div></div><a class="indexterm" name="id5409"></a><a class="indexterm" name="id5411"></a><p>
         This exception is raised for errors which are related to MySQL's
         operations. For example: too many connections; a host name could
         not be resolved; bad handshake; server is shutting down,
@@ -6103,11 +6048,11 @@ except mysql.connector.IntegrityError as
       </p><p>
         <code class="literal">errors.OperationalError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-poolerror"></a>10.12.10 errors.PoolError Exception</h3></div></div></div><a class="indexterm" name="id5433"></a><a class="indexterm" name="id5435"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-poolerror"></a>10.12.10 errors.PoolError Exception</h3></div></div></div><a class="indexterm" name="id5419"></a><a class="indexterm" name="id5421"></a><p>
         This exception is raised for connection pool errors.
         <code class="literal">errors.PoolError</code> is a subclass of
         <code class="literal">errors.Error</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-programmingerror"></a>10.12.11 errors.ProgrammingError Exception</h3></div></div></div><a class="indexterm" name="id5442"></a><a class="indexterm" name="id5444"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-programmingerror"></a>10.12.11 errors.ProgrammingError Exception</h3></div></div></div><a class="indexterm" name="id5428"></a><a class="indexterm" name="id5430"></a><p>
         This exception is raised on programming errors, for example when
         you have a syntax error in your SQL or a table was not found.
       </p><p>
@@ -6122,7 +6067,7 @@ except mysql.connector.ProgrammingError
 </pre><p>
         <code class="literal">errors.ProgrammingError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-warning"></a>10.12.12 errors.Warning Exception</h3></div></div></div><a class="indexterm" name="id5454"></a><a class="indexterm" name="id5456"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-warning"></a>10.12.12 errors.Warning Exception</h3></div></div></div><a class="indexterm" name="id5440"></a><a class="indexterm" name="id5442"></a><p>
         This exception is used for reporting important warnings,
         however, Connector/Python does not use it. It is included to be compliant
         with the Python Database Specification v2.0 (PEP-249).
@@ -6135,7 +6080,7 @@ except mysql.connector.ProgrammingError
       </p><p>
         <code class="literal">errors.Warning</code> is a subclass of the Python
         <code class="literal">StandardError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-custom-error-exception"></a>10.12.13 errors.custom_error_exception() Function</h3></div></div></div><a class="indexterm" name="id5467"></a><a class="indexterm" name="id5469"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-custom-error-exception"></a>10.12.13 errors.custom_error_exception() Function</h3></div></div></div><a class="indexterm" name="id5453"></a><a class="indexterm" name="id5455"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">errors.custom_error_exception(error=None, exception=None)
 </pre><p>
@@ -6188,9 +6133,9 @@ mysql.connector.custom_error_exception({
       an optional module that must be installed using a binary
       distribution of Connector/Python that includes it, or compiled using a source
       distribution. See <a class="xref" href="#connector-python-installation" title="Chapter 4 Connector/Python Installation">Chapter 4, <i>Connector/Python Installation</i></a>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-mysql-connector"></a>11.1 _mysql_connector Module</h2></div></div></div><a class="indexterm" name="id5503"></a><a class="indexterm" name="id5505"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-mysql-connector"></a>11.1 _mysql_connector Module</h2></div></div></div><a class="indexterm" name="id5489"></a><a class="indexterm" name="id5491"></a><p>
       The <code class="literal">_mysql_connector</code> module provides classes.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-mysql"></a>11.2 _mysql_connector.MySQL() Class</h2></div></div></div><a class="indexterm" name="id5511"></a><a class="indexterm" name="id5513"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-mysql"></a>11.2 _mysql_connector.MySQL() Class</h2></div></div></div><a class="indexterm" name="id5497"></a><a class="indexterm" name="id5499"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx = _mysql_connector.MySQL(<em class="replaceable"><code>args</code></em>)
 </pre><p>
@@ -6220,7 +6165,7 @@ ccnx.close()
       <a class="xref" href="#connector-python-connectargs" title="7.1 Connector/Python Connection Arguments">Section 7.1, “Connector/Python Connection Arguments”</a>, except that
       <code class="literal">charset_name</code> corresponds to
       <code class="literal">charset</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-affected-rows"></a>11.3 _mysql_connector.MySQL.affected_rows() Method</h2></div></div></div><a class="indexterm" name="id5540"></a><a class="indexterm" name="id5542"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-affected-rows"></a>11.3 _mysql_connector.MySQL.affected_rows() Method</h2></div></div></div><a class="indexterm" name="id5526"></a><a class="indexterm" name="id5528"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.affected_rows()
 </pre><p>
@@ -6228,7 +6173,7 @@ ccnx.close()
       most recent <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/update.html" target="_top"><code class="literal">UPDATE</code></a>,
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/insert.html" target="_top"><code class="literal">INSERT</code></a>, or
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/delete.html" target="_top"><code class="literal">DELETE</code></a> statement.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-autocommit"></a>11.4 _mysql_connector.MySQL.autocommit() Method</h2></div></div></div><a class="indexterm" name="id5555"></a><a class="indexterm" name="id5557"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-autocommit"></a>11.4 _mysql_connector.MySQL.autocommit() Method</h2></div></div></div><a class="indexterm" name="id5541"></a><a class="indexterm" name="id5543"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.autocommit(<em class="replaceable"><code>bool</code></em>)
 </pre><p>
@@ -6237,7 +6182,7 @@ ccnx.close()
       Raises a <code class="literal">ValueError</code> exception if
       <code class="literal">mode</code> is not <code class="literal">True</code> or
       <code class="literal">False</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-buffered"></a>11.5 _mysql_connector.MySQL.buffered() Method</h2></div></div></div><a class="indexterm" name="id5570"></a><a class="indexterm" name="id5572"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-buffered"></a>11.5 _mysql_connector.MySQL.buffered() Method</h2></div></div></div><a class="indexterm" name="id5556"></a><a class="indexterm" name="id5558"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">is_buffered = ccnx.buffered()     # getter
 ccnx.buffered(<em class="replaceable"><code>bool</code></em>)               # setter
@@ -6252,7 +6197,7 @@ ccnx.buffered(<em class="replaceable"><c
       For the setter syntax, raises a <code class="literal">TypeError</code>
       exception if the value is not <code class="literal">True</code> or
       <code class="literal">False</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-change-user"></a>11.6 _mysql_connector.MySQL.change_user() Method</h2></div></div></div><a class="indexterm" name="id5589"></a><a class="indexterm" name="id5591"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-change-user"></a>11.6 _mysql_connector.MySQL.change_user() Method</h2></div></div></div><a class="indexterm" name="id5575"></a><a class="indexterm" name="id5577"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.change_user(user='<em class="replaceable"><code>user_name</code></em>,
                  password='<em class="replaceable"><code>password_val</code></em>',
@@ -6261,7 +6206,7 @@ ccnx.buffered(<em class="replaceable"><c
       Changes the user and sets a new default database. Permitted
       arguments are <code class="literal">user</code>,
       <code class="literal">password</code>, and <code class="literal">database</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-character-set-name"></a>11.7 _mysql_connector.MySQL.character_set_name() Method</h2></div></div></div><a class="indexterm" name="id5604"></a><a class="indexterm" name="id5606"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-character-set-name"></a>11.7 _mysql_connector.MySQL.character_set_name() Method</h2></div></div></div><a class="indexterm" name="id5590"></a><a class="indexterm" name="id5592"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">charset = ccnx.character_set_name()
 </pre><p>
@@ -6272,17 +6217,17 @@ ccnx.buffered(<em class="replaceable"><c
       this is the case, a name usable by Python is returned. For
       example, the <code class="literal">'utf8mb4'</code> MySQL character set name
       is returned as <code class="literal">'utf8'</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-close"></a>11.8 _mysql_connector.MySQL.close() Method</h2></div></div></div><a class="indexterm" name="id5616"></a><a class="indexterm" name="id5618"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-close"></a>11.8 _mysql_connector.MySQL.close() Method</h2></div></div></div><a class="indexterm" name="id5602"></a><a class="indexterm" name="id5604"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.close()
 </pre><p>
       Closes the MySQL connection.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-commit"></a>11.9 _mysql_connector.MySQL.commit() Method</h2></div></div></div><a class="indexterm" name="id5625"></a><a class="indexterm" name="id5627"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-commit"></a>11.9 _mysql_connector.MySQL.commit() Method</h2></div></div></div><a class="indexterm" name="id5611"></a><a class="indexterm" name="id5613"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.commit()
 </pre><p>
       Commits the current transaction.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-connect"></a>11.10 _mysql_connector.MySQL.connect() Method</h2></div></div></div><a class="indexterm" name="id5634"></a><a class="indexterm" name="id5636"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-connect"></a>11.10 _mysql_connector.MySQL.connect() Method</h2></div></div></div><a class="indexterm" name="id5620"></a><a class="indexterm" name="id5622"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.connect(<em class="replaceable"><code>args</code></em>)
 </pre><p>
@@ -6309,14 +6254,14 @@ ccnx.close()
     </p><p>
       Raises a <code class="literal">TypeError</code> exception if any argument is
       of an invalid type.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-connected"></a>11.11 _mysql_connector.MySQL.connected() Method</h2></div></div></div><a class="indexterm" name="id5666"></a><a class="indexterm" name="id5668"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-connected"></a>11.11 _mysql_connector.MySQL.connected() Method</h2></div></div></div><a class="indexterm" name="id5652"></a><a class="indexterm" name="id5654"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">is_connected = ccnx.connected()
 </pre><p>
       Returns <code class="literal">True</code> or <code class="literal">False</code> to
       indicate whether the <code class="literal">MySQL</code> instance is
       connected.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-consume-result"></a>11.12 _mysql_connector.MySQL.consume_result() Method</h2></div></div></div><a class="indexterm" name="id5678"></a><a class="indexterm" name="id5680"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-consume-result"></a>11.12 _mysql_connector.MySQL.consume_result() Method</h2></div></div></div><a class="indexterm" name="id5664"></a><a class="indexterm" name="id5666"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.consume_result()
 </pre><p>
@@ -6324,7 +6269,7 @@ ccnx.close()
       <code class="literal">MySQL</code> instance, by fetching all rows. If the
       statement that was executed returned multiple result sets, this
       method loops over and consumes all of them.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-convert-to-mysql"></a>11.13 _mysql_connector.MySQL.convert_to_mysql() Method</h2></div></div></div><a class="indexterm" name="id5688"></a><a class="indexterm" name="id5690"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-convert-to-mysql"></a>11.13 _mysql_connector.MySQL.convert_to_mysql() Method</h2></div></div></div><a class="indexterm" name="id5674"></a><a class="indexterm" name="id5676"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">converted_obj = ccnx.convert_to_mysql(<em class="replaceable"><code>obj</code></em>))
 </pre><p>
@@ -6338,7 +6283,7 @@ ccnx.consume_result()
 </pre><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception if the
       Python object cannot be converted.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-escape-string"></a>11.14 _mysql_connector.MySQL.escape_string() Method</h2></div></div></div><a class="indexterm" name="id5701"></a><a class="indexterm" name="id5703"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-escape-string"></a>11.14 _mysql_connector.MySQL.escape_string() Method</h2></div></div></div><a class="indexterm" name="id5687"></a><a class="indexterm" name="id5689"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">str = ccnx.escape_string(<em class="replaceable"><code>str_to_escape</code></em>)
 </pre><p>
@@ -6351,7 +6296,7 @@ ccnx.consume_result()
       or (for Python 2) <code class="literal">string</code> type. Raises a
       <code class="literal">MySQLError</code> exception if the string could not be
       escaped.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-fetch-fields"></a>11.15 _mysql_connector.MySQL.fetch_fields() Method</h2></div></div></div><a class="indexterm" name="id5719"></a><a class="indexterm" name="id5721"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-fetch-fields"></a>11.15 _mysql_connector.MySQL.fetch_fields() Method</h2></div></div></div><a class="indexterm" name="id5705"></a><a class="indexterm" name="id5707"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">field_info = ccnx.fetch_fields()
 </pre><p>
@@ -6365,7 +6310,7 @@ field_info = ccnx.fetch_fields()
 for fi in field_info:
   print(fi)
 ccnx.consume_result()
-</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-fetch-row"></a>11.16 _mysql_connector.MySQL.fetch_row() Method</h2></div></div></div><a class="indexterm" name="id5731"></a><a class="indexterm" name="id5733"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-fetch-row"></a>11.16 _mysql_connector.MySQL.fetch_row() Method</h2></div></div></div><a class="indexterm" name="id5717"></a><a class="indexterm" name="id5719"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">row = ccnx.fetch_row()
 </pre><p>
@@ -6379,12 +6324,12 @@ ccnx.free_result()
 </pre><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception for any
       MySQL error returned by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-field-count"></a>11.17 _mysql_connector.MySQL.field_count() Method</h2></div></div></div><a class="indexterm" name="id5744"></a><a class="indexterm" name="id5746"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-field-count"></a>11.17 _mysql_connector.MySQL.field_count() Method</h2></div></div></div><a class="indexterm" name="id5730"></a><a class="indexterm" name="id5732"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.field_count()
 </pre><p>
       Returns the number of columns in the active result set.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-free-result"></a>11.18 _mysql_connector.MySQL.free_result() Method</h2></div></div></div><a class="indexterm" name="id5753"></a><a class="indexterm" name="id5755"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-free-result"></a>11.18 _mysql_connector.MySQL.free_result() Method</h2></div></div></div><a class="indexterm" name="id5739"></a><a class="indexterm" name="id5741"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.free_result()
 </pre><p>
@@ -6392,7 +6337,7 @@ ccnx.free_result()
       <code class="literal">MySQL</code> instance. If the statement that was
       executed returned multiple result sets, this method loops over and
       consumes all of them.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-character-set-info"></a>11.19 _mysql_connector.MySQL.get_character_set_info() Method</h2></div></div></div><a class="indexterm" name="id5763"></a><a class="indexterm" name="id5765"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-character-set-info"></a>11.19 _mysql_connector.MySQL.get_character_set_info() Method</h2></div></div></div><a class="indexterm" name="id5749"></a><a class="indexterm" name="id5751"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_character_set_info()
 </pre><p>
@@ -6402,64 +6347,64 @@ ccnx.free_result()
       <code class="literal">csname</code>, <code class="literal">comment</code>,
       <code class="literal">dir</code>, <code class="literal">mbminlen</code>, and
       <code class="literal">mbmaxlen</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-client-info"></a>11.20 _mysql_connector.MySQL.get_client_info() Method</h2></div></div></div><a class="indexterm" name="id5779"></a><a class="indexterm" name="id5781"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-client-info"></a>11.20 _mysql_connector.MySQL.get_client_info() Method</h2></div></div></div><a class="indexterm" name="id5765"></a><a class="indexterm" name="id5767"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_client_info()
 </pre><p>
       Returns the MySQL client library version as a string.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-client-version"></a>11.21 _mysql_connector.MySQL.get_client_version() Method</h2></div></div></div><a class="indexterm" name="id5788"></a><a class="indexterm" name="id5790"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-client-version"></a>11.21 _mysql_connector.MySQL.get_client_version() Method</h2></div></div></div><a class="indexterm" name="id5774"></a><a class="indexterm" name="id5776"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_client_version()
 </pre><p>
       Returns the MySQL client library version as a tuple.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-host-info"></a>11.22 _mysql_connector.MySQL.get_host_info() Method</h2></div></div></div><a class="indexterm" name="id5797"></a><a class="indexterm" name="id5799"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-host-info"></a>11.22 _mysql_connector.MySQL.get_host_info() Method</h2></div></div></div><a class="indexterm" name="id5783"></a><a class="indexterm" name="id5785"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_host_info()
 </pre><p>
       Returns a description of the type of connection in use as a
       string.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-proto-info"></a>11.23 _mysql_connector.MySQL.get_proto_info() Method</h2></div></div></div><a class="indexterm" name="id5806"></a><a class="indexterm" name="id5808"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-proto-info"></a>11.23 _mysql_connector.MySQL.get_proto_info() Method</h2></div></div></div><a class="indexterm" name="id5792"></a><a class="indexterm" name="id5794"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_proto_info()
 </pre><p>
       Returns the protocol version used by the current session.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-server-info"></a>11.24 _mysql_connector.MySQL.get_server_info() Method</h2></div></div></div><a class="indexterm" name="id5815"></a><a class="indexterm" name="id5817"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-server-info"></a>11.24 _mysql_connector.MySQL.get_server_info() Method</h2></div></div></div><a class="indexterm" name="id5801"></a><a class="indexterm" name="id5803"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_server_info()
 </pre><p>
       Returns the MySQL server version as a string.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-server-version"></a>11.25 _mysql_connector.MySQL.get_server_version() Method</h2></div></div></div><a class="indexterm" name="id5824"></a><a class="indexterm" name="id5826"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-server-version"></a>11.25 _mysql_connector.MySQL.get_server_version() Method</h2></div></div></div><a class="indexterm" name="id5810"></a><a class="indexterm" name="id5812"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_server_version()
 </pre><p>
       Returns the MySQL server version as a tuple.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-ssl-cipher"></a>11.26 _mysql_connector.MySQL.get_ssl_cipher() Method</h2></div></div></div><a class="indexterm" name="id5833"></a><a class="indexterm" name="id5835"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-ssl-cipher"></a>11.26 _mysql_connector.MySQL.get_ssl_cipher() Method</h2></div></div></div><a class="indexterm" name="id5819"></a><a class="indexterm" name="id5821"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_ssl_cipher()
 </pre><p>
       Returns the SSL cipher used for the current session, or
       <code class="literal">None</code> if SSL is not in use.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-hex-string"></a>11.27 _mysql_connector.MySQL.hex_string() Method</h2></div></div></div><a class="indexterm" name="id5843"></a><a class="indexterm" name="id5845"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-hex-string"></a>11.27 _mysql_connector.MySQL.hex_string() Method</h2></div></div></div><a class="indexterm" name="id5829"></a><a class="indexterm" name="id5831"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">str = ccnx.hex_string(<em class="replaceable"><code>string_to_hexify</code></em>)
 </pre><p>
       Encodes a value in hexadecimal format and wraps it within
       <code class="literal">X''</code>. For example, <code class="literal">"ham"</code>
       becomes <code class="literal">X'68616D'</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-insert-id"></a>11.28 _mysql_connector.MySQL.insert_id() Method</h2></div></div></div><a class="indexterm" name="id5856"></a><a class="indexterm" name="id5858"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-insert-id"></a>11.28 _mysql_connector.MySQL.insert_id() Method</h2></div></div></div><a class="indexterm" name="id5842"></a><a class="indexterm" name="id5844"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">insert_id = ccnx.insert_id()
 </pre><p>
       Returns the <code class="literal">AUTO_INCREMENT</code> value generated by
       the most recent executed statement, or 0 if there is no such
       value.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-more-results"></a>11.29 _mysql_connector.MySQL.more_results() Method</h2></div></div></div><a class="indexterm" name="id5866"></a><a class="indexterm" name="id5868"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-more-results"></a>11.29 _mysql_connector.MySQL.more_results() Method</h2></div></div></div><a class="indexterm" name="id5852"></a><a class="indexterm" name="id5854"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">more = ccnx.more_results()
 </pre><p>
       Returns <code class="literal">True</code> or <code class="literal">False</code> to
       indicate whether any more result sets exist.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-next-result"></a>11.30 _mysql_connector.MySQL.next_result() Method</h2></div></div></div><a class="indexterm" name="id5877"></a><a class="indexterm" name="id5879"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-next-result"></a>11.30 _mysql_connector.MySQL.next_result() Method</h2></div></div></div><a class="indexterm" name="id5863"></a><a class="indexterm" name="id5865"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.next_result()
 </pre><p>
@@ -6468,12 +6413,12 @@ ccnx.free_result()
     </p><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception for any
       MySQL error returned by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-num-fields"></a>11.31 _mysql_connector.MySQL.num_fields() Method</h2></div></div></div><a class="indexterm" name="id5888"></a><a class="indexterm" name="id5890"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-num-fields"></a>11.31 _mysql_connector.MySQL.num_fields() Method</h2></div></div></div><a class="indexterm" name="id5874"></a><a class="indexterm" name="id5876"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.num_fields()
 </pre><p>
       Returns the number of columns in the active result set.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-num-rows"></a>11.32 _mysql_connector.MySQL.num_rows() Method</h2></div></div></div><a class="indexterm" name="id5897"></a><a class="indexterm" name="id5899"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-num-rows"></a>11.32 _mysql_connector.MySQL.num_rows() Method</h2></div></div></div><a class="indexterm" name="id5883"></a><a class="indexterm" name="id5885"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.num_rows()
 </pre><p>
@@ -6481,13 +6426,13 @@ ccnx.free_result()
     </p><p>
       Raises a <code class="literal">MySQLError</code> exception if there is no
       result set.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-ping"></a>11.33 _mysql_connector.MySQL.ping() Method</h2></div></div></div><a class="indexterm" name="id5908"></a><a class="indexterm" name="id5910"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-ping"></a>11.33 _mysql_connector.MySQL.ping() Method</h2></div></div></div><a class="indexterm" name="id5894"></a><a class="indexterm" name="id5896"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">alive = ccnx.ping()
 </pre><p>
       Returns <code class="literal">True</code> or <code class="literal">False</code> to
       indicate whether the connection to the MySQL server is working.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-query"></a>11.34 _mysql_connector.MySQL.query() Method</h2></div></div></div><a class="indexterm" name="id5919"></a><a class="indexterm" name="id5921"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-query"></a>11.34 _mysql_connector.MySQL.query() Method</h2></div></div></div><a class="indexterm" name="id5905"></a><a class="indexterm" name="id5907"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.query(<em class="replaceable"><code>args</code></em>)
 </pre><p>
@@ -6518,7 +6463,7 @@ ccnx.consume_result()
       <code class="literal">TypeError</code> exception if any argument has an
       invalid type, and a <code class="literal">MySQLInterfaceError</code>
       exception for any MySQL error returned by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-raw"></a>11.35 _mysql_connector.MySQL.raw() Method</h2></div></div></div><a class="indexterm" name="id5949"></a><a class="indexterm" name="id5951"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-raw"></a>11.35 _mysql_connector.MySQL.raw() Method</h2></div></div></div><a class="indexterm" name="id5935"></a><a class="indexterm" name="id5937"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">is_raw = ccnx.raw()     # getter
 ccnx.raw(<em class="replaceable"><code>bool</code></em>)          # setter
@@ -6530,7 +6475,7 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       With a boolean argument, sets the <code class="literal">MySQL</code>
       instance raw mode.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-refresh"></a>11.36 _mysql_connector.MySQL.refresh() Method</h2></div></div></div><a class="indexterm" name="id5964"></a><a class="indexterm" name="id5966"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-refresh"></a>11.36 _mysql_connector.MySQL.refresh() Method</h2></div></div></div><a class="indexterm" name="id5950"></a><a class="indexterm" name="id5952"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.refresh(<em class="replaceable"><code>flags</code></em>)
 </pre><p>
@@ -6539,13 +6484,13 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">TypeError</code> exception if the first
       argument is not an integer.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-reset-connection"></a>11.37 _mysql_connector.MySQL.reset_connection() Method</h2></div></div></div><a class="indexterm" name="id5976"></a><a class="indexterm" name="id5978"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-reset-connection"></a>11.37 _mysql_connector.MySQL.reset_connection() Method</h2></div></div></div><a class="indexterm" name="id5962"></a><a class="indexterm" name="id5964"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.reset_connection()
 </pre><p>
       Resets the user variables and session variables for a connection
       session.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-rollback"></a>11.38 _mysql_connector.MySQL.rollback() Method</h2></div></div></div><a class="indexterm" name="id5985"></a><a class="indexterm" name="id5987"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-rollback"></a>11.38 _mysql_connector.MySQL.rollback() Method</h2></div></div></div><a class="indexterm" name="id5971"></a><a class="indexterm" name="id5973"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.rollback()
 </pre><p>
@@ -6553,7 +6498,7 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception on
       errors.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-select-db"></a>11.39 _mysql_connector.MySQL.select_db() Method</h2></div></div></div><a class="indexterm" name="id5996"></a><a class="indexterm" name="id5998"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-select-db"></a>11.39 _mysql_connector.MySQL.select_db() Method</h2></div></div></div><a class="indexterm" name="id5982"></a><a class="indexterm" name="id5984"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.select_db(<em class="replaceable"><code>db_name</code></em>)
 </pre><p>
@@ -6561,7 +6506,7 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception for any
       MySQL error returned by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-set-character-set"></a>11.40 _mysql_connector.MySQL.set_character_set() Method</h2></div></div></div><a class="indexterm" name="id6008"></a><a class="indexterm" name="id6010"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-set-character-set"></a>11.40 _mysql_connector.MySQL.set_character_set() Method</h2></div></div></div><a class="indexterm" name="id5994"></a><a class="indexterm" name="id5996"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.set_character_set(<em class="replaceable"><code>charset_name</code></em>)
 </pre><p>
@@ -6571,7 +6516,7 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">TypeError</code> exception if the argument is
       not a <code class="literal">PyString_type</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-shutdown"></a>11.41 _mysql_connector.MySQL.shutdown() Method</h2></div></div></div><a class="indexterm" name="id6021"></a><a class="indexterm" name="id6023"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-shutdown"></a>11.41 _mysql_connector.MySQL.shutdown() Method</h2></div></div></div><a class="indexterm" name="id6007"></a><a class="indexterm" name="id6009"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.shutdown(<em class="replaceable"><code>flags</code></em>)
 </pre><p>
@@ -6582,7 +6527,7 @@ ccnx.raw(<em class="replaceable"><code>b
       argument is not an integer. Raises a
       <code class="literal">MySQLErrorInterface</code> exception if an error is
       retured by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-stat"></a>11.42 _mysql_connector.MySQL.stat() Method</h2></div></div></div><a class="indexterm" name="id6034"></a><a class="indexterm" name="id6036"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-stat"></a>11.42 _mysql_connector.MySQL.stat() Method</h2></div></div></div><a class="indexterm" name="id6020"></a><a class="indexterm" name="id6022"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.stat()
 </pre><p>
@@ -6590,12 +6535,12 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">MySQLErrorInterface</code> exception if an
       error is retured by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-thread-id"></a>11.43 _mysql_connector.MySQL.thread_id() Method</h2></div></div></div><a class="indexterm" name="id6045"></a><a class="indexterm" name="id6047"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-thread-id"></a>11.43 _mysql_connector.MySQL.thread_id() Method</h2></div></div></div><a class="indexterm" name="id6031"></a><a class="indexterm" name="id6033"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">thread_id = ccnx.thread_id()
 </pre><p>
       Returns the current thread or connection ID.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-use-unicode"></a>11.44 _mysql_connector.MySQL.use_unicode() Method</h2></div></div></div><a class="indexterm" name="id6054"></a><a class="indexterm" name="id6056"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-use-unicode"></a>11.44 _mysql_connector.MySQL.use_unicode() Method</h2></div></div></div><a class="indexterm" name="id6040"></a><a class="indexterm" name="id6042"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">is_unicode = ccnx.use_unicode()      # getter
 ccnx.use_unicode(<em class="replaceable"><code>bool</code></em>)               # setter
@@ -6607,13 +6552,13 @@ ccnx.use_unicode(<em class="replaceable"
     </p><p>
       With a boolean argument, sets whether the <code class="literal">MySQL</code>
       instance returns nonbinary strings as Unicode.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-warning-count"></a>11.45 _mysql_connector.MySQL.warning_count() Method</h2></div></div></div><a class="indexterm" name="id6069"></a><a class="indexterm" name="id6071"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-warning-count"></a>11.45 _mysql_connector.MySQL.warning_count() Method</h2></div></div></div><a class="indexterm" name="id6055"></a><a class="indexterm" name="id6057"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.warning_count()
 </pre><p>
       Returns the number of errors, warnings, and notes produced by the
       previous SQL statement.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-have-result-set"></a>11.46 _mysql_connector.MySQL.have_result_set Property</h2></div></div></div><a class="indexterm" name="id6078"></a><a class="indexterm" name="id6080"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-have-result-set"></a>11.46 _mysql_connector.MySQL.have_result_set Property</h2></div></div></div><a class="indexterm" name="id6064"></a><a class="indexterm" name="id6066"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">has_rows = ccnx.have_result_set
 </pre><p>
@@ -6627,4 +6572,4 @@ ccnx.use_unicode(<em class="replaceable"
 &nbsp;|&nbsp;<a href="#connector-python_index0_M">M</a>
 &nbsp;|&nbsp;<a href="#connector-python_index0_P">P</a>
 &nbsp;|&nbsp;<a href="#connector-python_index0_S">S</a>
-</p><div class="indexdiv"><h3><a name="connector-python_index0_Symbols"></a>Symbols</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id5503">_mysql_connector module, <a class="indexterm" href="#connector-python-api-cext-mysql-connector">_mysql_connector Module</a></dt><dt id="ientry-id5511">_mysql_connector.MySQL() class, <a class="indexterm" href="#connector-python-api-cext-mysql">_mysql_connector.MySQL() Class</a></dt><dt id="ientry-id5540">_mysql_connector.MySQL.affected_rows() method, <a class="indexterm" href="#connector-python-api-cext-affected-rows">_mysql_connector.MySQL.affected_rows() Method</a></dt><dt id="ientry-id5555">_mysql_connector.MySQL.autocommit() method, <a class="indexterm" href="#connector-python-api-cext-autocommit">_mysql_connector.MySQL.autocommit() Method</a></dt><dt id="ientry-id5570">_mysql_connector.MySQL.buffered() method, <a class="indexterm" href="#connector-python-api-cext-buffered">_mysql_connector.MySQL.buffered() Method</a></dt><dt id="ientry-id5589">_mysql_connector.MySQL.change_user() method, <a class="indexterm" href="#connector-python-api-cext-change-user">_mysql_connector.MySQL.change_user() Method</a></dt><dt id="ientry-id5604">_mysql_connector.MySQL.character_set_name() method, <a class="indexterm" href="#connector-python-api-cext-character-set-name">_mysql_connector.MySQL.character_set_name() Method</a></dt><dt id="ientry-id5616">_mysql_connector.MySQL.close() method, <a class="indexterm" href="#connector-python-api-cext-close">_mysql_connector.MySQL.close() Method</a></dt><dt id="ientry-id5625">_mysql_connector.MySQL.commit() method, <a class="indexterm" href="#connector-python-api-cext-commit">_mysql_connector.MySQL.commit() Method</a></dt><dt id="ientry-id5634">_mysql_connector.MySQL.connect() method, <a class="indexterm" href="#connector-python-api-cext-connect">_mysql_connector.MySQL.connect() Method</a></dt><dt id="ientry-id5666">_mysql_connector.MySQL.connected() method, <a class="indexterm" href="#connector-python-api-cext-connected">_mysql_connector.MySQL.connected() Method</a></dt><dt id="ientry-id5678">_mysql_connector.MySQL.consume_result() method, <a class="indexterm" href="#connector-python-api-cext-consume-result">_mysql_connector.MySQL.consume_result() Method</a></dt><dt id="ientry-id5688">_mysql_connector.MySQL.convert_to_mysql() method, <a class="indexterm" href="#connector-python-api-cext-convert-to-mysql">_mysql_connector.MySQL.convert_to_mysql() Method</a></dt><dt id="ientry-id5701">_mysql_connector.MySQL.escape_string() method, <a class="indexterm" href="#connector-python-api-cext-escape-string">_mysql_connector.MySQL.escape_string() Method</a></dt><dt id="ientry-id5719">_mysql_connector.MySQL.fetch_fields() method, <a class="indexterm" href="#connector-python-api-cext-fetch-fields">_mysql_connector.MySQL.fetch_fields() Method</a></dt><dt id="ientry-id5731">_mysql_connector.MySQL.fetch_row() method, <a class="indexterm" href="#connector-python-api-cext-fetch-row">_mysql_connector.MySQL.fetch_row() Method</a></dt><dt id="ientry-id5744">_mysql_connector.MySQL.field_count() method, <a class="indexterm" href="#connector-python-api-cext-field-count">_mysql_connector.MySQL.field_count() Method</a></dt><dt id="ientry-id5753">_mysql_connector.MySQL.free_result() method, <a class="indexterm" href="#connector-python-api-cext-free-result">_mysql_connector.MySQL.free_result() Method</a></dt><dt id="ientry-id5763">_mysql_connector.MySQL.get_character_set_info() method, <a class="indexterm" href="#connector-python-api-cext-get-character-set-info">_mysql_connector.MySQL.get_character_set_info() Method</a></dt><dt id="ientry-id5779">_mysql_connector.MySQL.get_client_info() method, <a class="indexterm" href="#connector-python-api-cext-get-client-info">_mysql_connector.MySQL.get_client_info() Method</a></dt><dt id="ientry-id5788">_mysql_connector.MySQL.get_client_version() method, <a class="indexterm" href="#connector-python-api-cext-get-client-version">_mysql_connector.MySQL.get_client_version() Method</a></dt><dt id="ientry-id5797">_mysql_connector.MySQL.get_host_info() method, <a class="indexterm" href="#connector-python-api-cext-get-host-info">_mysql_connector.MySQL.get_host_info() Method</a></dt><dt id="ientry-id5806">_mysql_connector.MySQL.get_proto_info() method, <a class="indexterm" href="#connector-python-api-cext-get-proto-info">_mysql_connector.MySQL.get_proto_info() Method</a></dt><dt id="ientry-id5815">_mysql_connector.MySQL.get_server_info() method, <a class="indexterm" href="#connector-python-api-cext-get-server-info">_mysql_connector.MySQL.get_server_info() Method</a></dt><dt id="ientry-id5824">_mysql_connector.MySQL.get_server_version() method, <a class="indexterm" href="#connector-python-api-cext-get-server-version">_mysql_connector.MySQL.get_server_version() Method</a></dt><dt id="ientry-id5833">_mysql_connector.MySQL.get_ssl_cipher() method, <a class="indexterm" href="#connector-python-api-cext-get-ssl-cipher">_mysql_connector.MySQL.get_ssl_cipher() Method</a></dt><dt id="ientry-id6078">_mysql_connector.MySQL.have_result_set property, <a class="indexterm" href="#connector-python-api-cext-have-result-set">_mysql_connector.MySQL.have_result_set Property</a></dt><dt id="ientry-id5843">_mysql_connector.MySQL.hex_string() method, <a class="indexterm" href="#connector-python-api-cext-hex-string">_mysql_connector.MySQL.hex_string() Method</a></dt><dt id="ientry-id5856">_mysql_connector.MySQL.insert_id() method, <a class="indexterm" href="#connector-python-api-cext-insert-id">_mysql_connector.MySQL.insert_id() Method</a></dt><dt id="ientry-id5866">_mysql_connector.MySQL.more_results() method, <a class="indexterm" href="#connector-python-api-cext-more-results">_mysql_connector.MySQL.more_results() Method</a></dt><dt id="ientry-id5877">_mysql_connector.MySQL.next_result() method, <a class="indexterm" href="#connector-python-api-cext-next-result">_mysql_connector.MySQL.next_result() Method</a></dt><dt id="ientry-id5888">_mysql_connector.MySQL.num_fields() method, <a class="indexterm" href="#connector-python-api-cext-num-fields">_mysql_connector.MySQL.num_fields() Method</a></dt><dt id="ientry-id5897">_mysql_connector.MySQL.num_rows() method, <a class="indexterm" href="#connector-python-api-cext-num-rows">_mysql_connector.MySQL.num_rows() Method</a></dt><dt id="ientry-id5908">_mysql_connector.MySQL.ping() method, <a class="indexterm" href="#connector-python-api-cext-ping">_mysql_connector.MySQL.ping() Method</a></dt><dt id="ientry-id5919">_mysql_connector.MySQL.query() method, <a class="indexterm" href="#connector-python-api-cext-query">_mysql_connector.MySQL.query() Method</a></dt><dt id="ientry-id5949">_mysql_connector.MySQL.raw() method, <a class="indexterm" href="#connector-python-api-cext-raw">_mysql_connector.MySQL.raw() Method</a></dt><dt id="ientry-id5964">_mysql_connector.MySQL.refresh() method, <a class="indexterm" href="#connector-python-api-cext-refresh">_mysql_connector.MySQL.refresh() Method</a></dt><dt id="ientry-id5976">_mysql_connector.MySQL.reset_connection() method, <a class="indexterm" href="#connector-python-api-cext-reset-connection">_mysql_connector.MySQL.reset_connection() Method</a></dt><dt id="ientry-id5985">_mysql_connector.MySQL.rollback() method, <a class="indexterm" href="#connector-python-api-cext-rollback">_mysql_connector.MySQL.rollback() Method</a></dt><dt id="ientry-id5996">_mysql_connector.MySQL.select_db() method, <a class="indexterm" href="#connector-python-api-cext-select-db">_mysql_connector.MySQL.select_db() Method</a></dt><dt id="ientry-id6008">_mysql_connector.MySQL.set_character_set() method, <a class="indexterm" href="#connector-python-api-cext-set-character-set">_mysql_connector.MySQL.set_character_set() Method</a></dt><dt id="ientry-id6021">_mysql_connector.MySQL.shutdown() method, <a class="indexterm" href="#connector-python-api-cext-shutdown">_mysql_connector.MySQL.shutdown() Method</a></dt><dt id="ientry-id6034">_mysql_connector.MySQL.stat() method, <a class="indexterm" href="#connector-python-api-cext-stat">_mysql_connector.MySQL.stat() Method</a></dt><dt id="ientry-id6045">_mysql_connector.MySQL.thread_id() method, <a class="indexterm" href="#connector-python-api-cext-thread-id">_mysql_connector.MySQL.thread_id() Method</a></dt><dt id="ientry-id6054">_mysql_connector.MySQL.use_unicode() method, <a class="indexterm" href="#connector-python-api-cext-use-unicode">_mysql_connector.MySQL.use_unicode() Method</a></dt><dt id="ientry-id6069">_mysql_connector.MySQL.warning_count() method, <a class="indexterm" href="#connector-python-api-cext-warning-count">_mysql_connector.MySQL.warning_count() Method</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_C"></a>C</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id3394">class</dt><dd><dl><dt>connection.MySQLConnection, <a class="indexterm" href="#connector-python-api-mysqlconnection">connection.MySQLConnection Class</a></dt><dt>constants.CharacterSet, <a class="indexterm" href="#connector-python-api-characterset">constants.CharacterSet Class</a></dt><dt>constants.ClientFlag, <a class="indexterm" href="#connector-python-api-clientflag">constants.ClientFlag Class</a></dt><dt>constants.FieldType, <a class="indexterm" href="#connector-python-api-fieldtype">constants.FieldType Class</a></dt><dt>constants.RefreshOption, <a class="indexterm" href="#connector-python-api-refreshoption">constants.RefreshOption Class</a></dt><dt>constants.SQLMode, <a class="indexterm" href="#connector-python-api-sqlmode">constants.SQLMode Class</a></dt><dt>cursor.MySQLCursor, <a class="indexterm" href="#connector-python-api-mysqlcursor">cursor.MySQLCursor Class</a></dt><dt>cursor.MySQLCursorBuffered, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffered">cursor.MySQLCursorBuffered Class</a></dt><dt>cursor.MySQLCursorBufferedDict, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffereddict">cursor.MySQLCursorBufferedDict Class</a></dt><dt>cursor.MySQLCursorDict, <a class="indexterm" href="#connector-python-api-mysqlcursordict">cursor.MySQLCursorDict Class</a></dt><dt>cursor.MySQLCursorPrepared, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt>cursor.MySQLCursorRaw, <a class="indexterm" href="#connector-python-api-mysqlcursorraw">cursor.MySQLCursorRaw Class</a></dt><dt>pooling.MySQLConnectionPool, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool">pooling.MySQLConnectionPool Class</a></dt><dt>pooling.PooledMySQLConnection, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection">pooling.PooledMySQLConnection Class</a></dt><dt>_mysql_connector.MySQL(), <a class="indexterm" href="#connector-python-api-cext-mysql">_mysql_connector.MySQL() Class</a></dt></dl></dd><dt id="ientry-id5026">COM_STMT_SEND_LONG_DATA</dt><dd><dl><dt>prepared statements, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt></dl></dd><dt id="ientry-id3392">connection.MySQLConnection class, <a class="indexterm" href="#connector-python-api-mysqlconnection">connection.MySQLConnection Class</a></dt><dt id="ientry-id3400">connection.MySQLConnection() constructor, <a class="indexterm" href="#connector-python-api-mysqlconnection-constructor">connection.MySQLConnection() Constructor</a></dt><dt id="ientry-id1571">Connector/Python, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id5073">constants.CharacterSet class, <a class="indexterm" href="#connector-python-api-characterset">constants.CharacterSet Class</a></dt><dt id="ientry-id5034">constants.ClientFlag class, <a class="indexterm" href="#connector-python-api-clientflag">constants.ClientFlag Class</a></dt><dt id="ientry-id5050">constants.FieldType class, <a class="indexterm" href="#connector-python-api-fieldtype">constants.FieldType Class</a></dt><dt id="ientry-id5083">constants.RefreshOption class, <a class="indexterm" href="#connector-python-api-refreshoption">constants.RefreshOption Class</a></dt><dt id="ientry-id5061">constants.SQLMode class, <a class="indexterm" href="#connector-python-api-sqlmode">constants.SQLMode Class</a></dt><dt id="ientry-id3402">constructor</dt><dd><dl><dt>connection.MySQLConnection(), <a class="indexterm" href="#connector-python-api-mysqlconnection-constructor">connection.MySQLConnection() Constructor</a></dt><dt>cursor.MySQLCursor, <a class="indexterm" href="#connector-python-api-mysqlcursor-constructor">cursor.MySQLCursor Constructor</a></dt><dt>pooling.MySQLConnectionPool, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-constructor">pooling.MySQLConnectionPool Constructor</a></dt><dt>pooling.PooledMySQLConnection, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-constructor">pooling.PooledMySQLConnection Constructor</a></dt></dl></dd><dt id="ientry-id4858">cursor.mysqlcursor</dt><dd><dl><dt>Subclasses, <a class="indexterm" href="#connector-python-api-cursor-subclasses">Subclasses cursor.MySQLCursor</a></dt></dl></dd><dt id="ientry-id4413">cursor.MySQLCursor class, <a class="indexterm" href="#connector-python-api-mysqlcursor">cursor.MySQLCursor Class</a></dt><dt id="ientry-id4455">cursor.MySQLCursor constructor, <a class="indexterm" href="#connector-python-api-mysqlcursor-constructor">cursor.MySQLCursor Constructor</a></dt><dt id="ientry-id4865">cursor.MySQLCursorBuffered class, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffered">cursor.MySQLCursorBuffered Class</a></dt><dt id="ientry-id4932">cursor.MySQLCursorBufferedDict class, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffereddict">cursor.MySQLCursorBufferedDict Class</a></dt><dt id="ientry-id4913">cursor.MySQLCursorDict class, <a class="indexterm" href="#connector-python-api-mysqlcursordict">cursor.MySQLCursorDict Class</a></dt><dt id="ientry-id4950">cursor.MySQLCursorPrepared class, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt id="ientry-id4893">cursor.MySQLCursorRaw class, <a class="indexterm" href="#connector-python-api-mysqlcursorraw">cursor.MySQLCursorRaw Class</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_D"></a>D</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id2962">DYLD_LIBRARY_PATH environment variable, <a class="indexterm" href="#connector-python-cext-development">Application Development with the Connector/Python C Extension</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_E"></a>E</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id2964">environment variable</dt><dd><dl><dt>DYLD_LIBRARY_PATH, <a class="indexterm" href="#connector-python-cext-development">Application Development with the Connector/Python C Extension</a></dt></dl></dd><dt id="ientry-id5309">errorcode module, <a class="indexterm" href="#connector-python-api-errorcode">errorcode Module</a></dt><dt id="ientry-id5467">errors.custom_error_exception() function, <a class="indexterm" href="#connector-python-api-errors-custom-error-exception">errors.custom_error_exception() Function</a></dt><dt id="ientry-id5371">errors.DatabaseError exception, <a class="indexterm" href="#connector-python-api-errors-databaseerror">errors.DatabaseError Exception</a></dt><dt id="ientry-id5359">errors.DataError exception, <a class="indexterm" href="#connector-python-api-errors-dataerror">errors.DataError Exception</a></dt><dt id="ientry-id5319">errors.Error exception, <a class="indexterm" href="#connector-python-api-errors-error">errors.Error Exception</a></dt><dt id="ientry-id5381">errors.IntegrityError exception, <a class="indexterm" href="#connector-python-api-errors-integrityerror">errors.IntegrityError Exception</a></dt><dt id="ientry-id5393">errors.InterfaceError exception, <a class="indexterm" href="#connector-python-api-errors-interfaceerror">errors.InterfaceError Exception</a></dt><dt id="ientry-id5403">errors.InternalError exception, <a class="indexterm" href="#connector-python-api-errors-internalerror">errors.InternalError Exception</a></dt><dt id="ientry-id5413">errors.NotSupportedError exception, <a class="indexterm" href="#connector-python-api-errors-notsupportederror">errors.NotSupportedError Exception</a></dt><dt id="ientry-id5423">errors.OperationalError exception, <a class="indexterm" href="#connector-python-api-errors-operationalerror">errors.OperationalError Exception</a></dt><dt id="ientry-id5433">errors.PoolError exception, <a class="indexterm" href="#connector-python-api-errors-poolerror">errors.PoolError Exception</a></dt><dt id="ientry-id5442">errors.ProgrammingError exception, <a class="indexterm" href="#connector-python-api-errors-programmingerror">errors.ProgrammingError Exception</a></dt><dt id="ientry-id5454">errors.Warning exception, <a class="indexterm" href="#connector-python-api-errors-warning">errors.Warning Exception</a></dt><dt id="ientry-id5321">exception</dt><dd><dl><dt>errors.DatabaseError, <a class="indexterm" href="#connector-python-api-errors-databaseerror">errors.DatabaseError Exception</a></dt><dt>errors.DataError, <a class="indexterm" href="#connector-python-api-errors-dataerror">errors.DataError Exception</a></dt><dt>errors.Error, <a class="indexterm" href="#connector-python-api-errors-error">errors.Error Exception</a></dt><dt>errors.IntegrityError, <a class="indexterm" href="#connector-python-api-errors-integrityerror">errors.IntegrityError Exception</a></dt><dt>errors.InterfaceError, <a class="indexterm" href="#connector-python-api-errors-interfaceerror">errors.InterfaceError Exception</a></dt><dt>errors.InternalError, <a class="indexterm" href="#connector-python-api-errors-internalerror">errors.InternalError Exception</a></dt><dt>errors.NotSupportedError, <a class="indexterm" href="#connector-python-api-errors-notsupportederror">errors.NotSupportedError Exception</a></dt><dt>errors.OperationalError, <a class="indexterm" href="#connector-python-api-errors-operationalerror">errors.OperationalError Exception</a></dt><dt>errors.PoolError, <a class="indexterm" href="#connector-python-api-errors-poolerror">errors.PoolError Exception</a></dt><dt>errors.ProgrammingError, <a class="indexterm" href="#connector-python-api-errors-programmingerror">errors.ProgrammingError Exception</a></dt><dt>errors.Warning, <a class="indexterm" href="#connector-python-api-errors-warning">errors.Warning Exception</a></dt></dl></dd></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_F"></a>F</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id5469">function</dt><dd><dl><dt>errors.custom_error_exception(), <a class="indexterm" href="#connector-python-api-errors-custom-error-exception">errors.custom_error_exception() Function</a></dt></dl></dd></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_M"></a>M</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id3340">method</dt><dd><dl><dt>mysql.connector.connect(), <a class="indexterm" href="#connector-python-api-mysql-connector-connect">mysql.connector.connect() Method</a></dt><dt>MySQLConnection.close(), <a class="indexterm" href="#connector-python-api-mysqlconnection-close">MySQLConnection.close() Method</a></dt><dt>MySQLConnection.cmd_change_user(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-change-user">MySQLConnection.cmd_change_user() Method</a></dt><dt>MySQLConnection.cmd_debug(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-debug">MySQLConnection.cmd_debug() Method</a></dt><dt>MySQLConnection.cmd_init_db(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-init-db">MySQLConnection.cmd_init_db() Method</a></dt><dt>MySQLConnection.cmd_ping(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-ping">MySQLConnection.cmd_ping() Method</a></dt><dt>MySQLConnection.cmd_process_info(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-info">MySQLConnection.cmd_process_info() Method</a></dt><dt>MySQLConnection.cmd_process_kill(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-kill">MySQLConnection.cmd_process_kill() Method</a></dt><dt>MySQLConnection.cmd_query(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query">MySQLConnection.cmd_query() Method</a></dt><dt>MySQLConnection.cmd_query_iter(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query-iter">MySQLConnection.cmd_query_iter() Method</a></dt><dt>MySQLConnection.cmd_quit(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-quit">MySQLConnection.cmd_quit() Method</a></dt><dt>MySQLConnection.cmd_refresh(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-refresh">MySQLConnection.cmd_refresh() Method</a></dt><dt>MySQLConnection.cmd_reset_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-reset-connection">MySQLConnection.cmd_reset_connection() Method</a></dt><dt>MySQLConnection.cmd_shutdown(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-shutdown">MySQLConnection.cmd_shutdown() Method</a></dt><dt>MySQLConnection.cmd_statistics(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-statistics">MySQLConnection.cmd_statistics() Method</a></dt><dt>MySQLConnection.commit(), <a class="indexterm" href="#connector-python-api-mysqlconnection-commit">MySQLConnection.commit() Method</a></dt><dt>MySQLConnection.config(), <a class="indexterm" href="#connector-python-api-mysqlconnection-config">MySQLConnection.config() Method</a></dt><dt>MySQLConnection.connect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-connect">MySQLConnection.connect() Method</a></dt><dt>MySQLConnection.cursor(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cursor">MySQLConnection.cursor() Method</a></dt><dt>MySQLConnection.disconnect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-disconnect">MySQLConnection.disconnect() Method</a></dt><dt>MySQLConnection.get_row(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-row">MySQLConnection.get_row() Method</a></dt><dt>MySQLConnection.get_rows(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-rows">MySQLConnection.get_rows() Method</a></dt><dt>MySQLConnection.get_server_info(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-info">MySQLConnection.get_server_info() Method</a></dt><dt>MySQLConnection.get_server_version(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-version">MySQLConnection.get_server_version() Method</a></dt><dt>MySQLConnection.isset_client_flag(), <a class="indexterm" href="#connector-python-api-mysqlconnection-isset-client-flag">MySQLConnection.isset_client_flag() Method</a></dt><dt>MySQLConnection.is_connected(), <a class="indexterm" href="#connector-python-api-mysqlconnection-is-connected">MySQLConnection.is_connected() Method</a></dt><dt>MySQLConnection.ping(), <a class="indexterm" href="#connector-python-api-mysqlconnection-ping">MySQLConnection.ping() Method</a></dt><dt>MySQLConnection.reconnect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-reconnect">MySQLConnection.reconnect() Method</a></dt><dt>MySQLConnection.reset_session(), <a class="indexterm" href="#connector-python-api-mysqlconnection-reset-session">MySQLConnection.reset_session() Method</a></dt><dt>MySQLConnection.rollback(), <a class="indexterm" href="#connector-python-api-mysqlconnection-rollback">MySQLConnection.rollback() Method</a></dt><dt>MySQLConnection.set_charset_collation(), <a class="indexterm" href="#connector-python-api-mysqlconnection-set-charset-collation">MySQLConnection.set_charset_collation() Method</a></dt><dt>MySQLConnection.set_client_flags(), <a class="indexterm" href="#connector-python-api-mysqlconnection-set-client-flags">MySQLConnection.set_client_flags() Method</a></dt><dt>MySQLConnection.shutdown(), <a class="indexterm" href="#connector-python-api-mysqlconnection-shutdown">MySQLConnection.shutdown() Method</a></dt><dt>MySQLConnection.start_transaction(), <a class="indexterm" href="#connector-python-api-mysqlconnection-start-transaction">MySQLConnection.start_transaction() Method</a></dt><dt>MySQLConnectionPool.add_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-add-connection">MySQLConnectionPool.add_connection() Method</a></dt><dt>MySQLConnectionPool.get_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-get-connection">MySQLConnectionPool.get_connection() Method</a></dt><dt>MySQLConnectionPool.set_config(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-set-config">MySQLConnectionPool.set_config() Method</a></dt><dt>MySQLCursor.add_attribute(), <a class="indexterm" href="#connector-python-api-mysqlcursor-add-attribute">MySQLCursor.add_attribute() Method</a></dt><dt>MySQLCursor.callproc(), <a class="indexterm" href="#connector-python-api-mysqlcursor-callproc">MySQLCursor.callproc() Method</a></dt><dt>MySQLCursor.clear_attributes(), <a class="indexterm" href="#connector-python-api-mysqlcursor-clear-attributes">MySQLCursor.clear_attributes() Method</a></dt><dt>MySQLCursor.close(), <a class="indexterm" href="#connector-python-api-mysqlcursor-close">MySQLCursor.close() Method</a></dt><dt>MySQLCursor.execute(), <a class="indexterm" href="#connector-python-api-mysqlcursor-execute">MySQLCursor.execute() Method</a></dt><dt>MySQLCursor.executemany(), <a class="indexterm" href="#connector-python-api-mysqlcursor-executemany">MySQLCursor.executemany() Method</a></dt><dt>MySQLCursor.fetchall(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchall">MySQLCursor.fetchall() Method</a></dt><dt>MySQLCursor.fetchmany(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchmany">MySQLCursor.fetchmany() Method</a></dt><dt>MySQLCursor.fetchone(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchone">MySQLCursor.fetchone() Method</a></dt><dt>MySQLCursor.fetchsets(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchsets">MySQLCursor.fetchsets() Method</a></dt><dt>MySQLCursor.fetchwarnings(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchwarnings">MySQLCursor.fetchwarnings() Method</a></dt><dt>MySQLCursor.get_attributes(), <a class="indexterm" href="#connector-python-api-mysqlcursor-get-attributes">MySQLCursor.get_attributes() Method</a></dt><dt>MySQLCursor.nextset(), <a class="indexterm" href="#connector-python-api-mysqlcursor-nextset">MySQLCursor.nextset() Method</a></dt><dt>MySQLCursor.stored_results(), <a class="indexterm" href="#connector-python-api-mysqlcursor-stored-results">MySQLCursor.stored_results() Method</a></dt><dt>PooledMySQLConnection.close(), <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-close">PooledMySQLConnection.close() Method</a></dt><dt>PooledMySQLConnection.config(), <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-config">PooledMySQLConnection.config() Method</a></dt><dt>_mysql_connector.MySQL.affected_rows(), <a class="indexterm" href="#connector-python-api-cext-affected-rows">_mysql_connector.MySQL.affected_rows() Method</a></dt><dt>_mysql_connector.MySQL.autocommit(), <a class="indexterm" href="#connector-python-api-cext-autocommit">_mysql_connector.MySQL.autocommit() Method</a></dt><dt>_mysql_connector.MySQL.buffered(), <a class="indexterm" href="#connector-python-api-cext-buffered">_mysql_connector.MySQL.buffered() Method</a></dt><dt>_mysql_connector.MySQL.change_user(), <a class="indexterm" href="#connector-python-api-cext-change-user">_mysql_connector.MySQL.change_user() Method</a></dt><dt>_mysql_connector.MySQL.character_set_name(), <a class="indexterm" href="#connector-python-api-cext-character-set-name">_mysql_connector.MySQL.character_set_name() Method</a></dt><dt>_mysql_connector.MySQL.close(), <a class="indexterm" href="#connector-python-api-cext-close">_mysql_connector.MySQL.close() Method</a></dt><dt>_mysql_connector.MySQL.commit(), <a class="indexterm" href="#connector-python-api-cext-commit">_mysql_connector.MySQL.commit() Method</a></dt><dt>_mysql_connector.MySQL.connect(), <a class="indexterm" href="#connector-python-api-cext-connect">_mysql_connector.MySQL.connect() Method</a></dt><dt>_mysql_connector.MySQL.connected(), <a class="indexterm" href="#connector-python-api-cext-connected">_mysql_connector.MySQL.connected() Method</a></dt><dt>_mysql_connector.MySQL.consume_result(), <a class="indexterm" href="#connector-python-api-cext-consume-result">_mysql_connector.MySQL.consume_result() Method</a></dt><dt>_mysql_connector.MySQL.convert_to_mysql(), <a class="indexterm" href="#connector-python-api-cext-convert-to-mysql">_mysql_connector.MySQL.convert_to_mysql() Method</a></dt><dt>_mysql_connector.MySQL.escape_string(), <a class="indexterm" href="#connector-python-api-cext-escape-string">_mysql_connector.MySQL.escape_string() Method</a></dt><dt>_mysql_connector.MySQL.fetch_fields(), <a class="indexterm" href="#connector-python-api-cext-fetch-fields">_mysql_connector.MySQL.fetch_fields() Method</a></dt><dt>_mysql_connector.MySQL.fetch_row(), <a class="indexterm" href="#connector-python-api-cext-fetch-row">_mysql_connector.MySQL.fetch_row() Method</a></dt><dt>_mysql_connector.MySQL.field_count(), <a class="indexterm" href="#connector-python-api-cext-field-count">_mysql_connector.MySQL.field_count() Method</a></dt><dt>_mysql_connector.MySQL.free_result(), <a class="indexterm" href="#connector-python-api-cext-free-result">_mysql_connector.MySQL.free_result() Method</a></dt><dt>_mysql_connector.MySQL.get_character_set_info(), <a class="indexterm" href="#connector-python-api-cext-get-character-set-info">_mysql_connector.MySQL.get_character_set_info() Method</a></dt><dt>_mysql_connector.MySQL.get_client_info(), <a class="indexterm" href="#connector-python-api-cext-get-client-info">_mysql_connector.MySQL.get_client_info() Method</a></dt><dt>_mysql_connector.MySQL.get_client_version(), <a class="indexterm" href="#connector-python-api-cext-get-client-version">_mysql_connector.MySQL.get_client_version() Method</a></dt><dt>_mysql_connector.MySQL.get_host_info(), <a class="indexterm" href="#connector-python-api-cext-get-host-info">_mysql_connector.MySQL.get_host_info() Method</a></dt><dt>_mysql_connector.MySQL.get_proto_info(), <a class="indexterm" href="#connector-python-api-cext-get-proto-info">_mysql_connector.MySQL.get_proto_info() Method</a></dt><dt>_mysql_connector.MySQL.get_server_info(), <a class="indexterm" href="#connector-python-api-cext-get-server-info">_mysql_connector.MySQL.get_server_info() Method</a></dt><dt>_mysql_connector.MySQL.get_server_version(), <a class="indexterm" href="#connector-python-api-cext-get-server-version">_mysql_connector.MySQL.get_server_version() Method</a></dt><dt>_mysql_connector.MySQL.get_ssl_cipher(), <a class="indexterm" href="#connector-python-api-cext-get-ssl-cipher">_mysql_connector.MySQL.get_ssl_cipher() Method</a></dt><dt>_mysql_connector.MySQL.hex_string(), <a class="indexterm" href="#connector-python-api-cext-hex-string">_mysql_connector.MySQL.hex_string() Method</a></dt><dt>_mysql_connector.MySQL.insert_id(), <a class="indexterm" href="#connector-python-api-cext-insert-id">_mysql_connector.MySQL.insert_id() Method</a></dt><dt>_mysql_connector.MySQL.more_results(), <a class="indexterm" href="#connector-python-api-cext-more-results">_mysql_connector.MySQL.more_results() Method</a></dt><dt>_mysql_connector.MySQL.next_result(), <a class="indexterm" href="#connector-python-api-cext-next-result">_mysql_connector.MySQL.next_result() Method</a></dt><dt>_mysql_connector.MySQL.num_fields(), <a class="indexterm" href="#connector-python-api-cext-num-fields">_mysql_connector.MySQL.num_fields() Method</a></dt><dt>_mysql_connector.MySQL.num_rows(), <a class="indexterm" href="#connector-python-api-cext-num-rows">_mysql_connector.MySQL.num_rows() Method</a></dt><dt>_mysql_connector.MySQL.ping(), <a class="indexterm" href="#connector-python-api-cext-ping">_mysql_connector.MySQL.ping() Method</a></dt><dt>_mysql_connector.MySQL.query(), <a class="indexterm" href="#connector-python-api-cext-query">_mysql_connector.MySQL.query() Method</a></dt><dt>_mysql_connector.MySQL.raw(), <a class="indexterm" href="#connector-python-api-cext-raw">_mysql_connector.MySQL.raw() Method</a></dt><dt>_mysql_connector.MySQL.refresh(), <a class="indexterm" href="#connector-python-api-cext-refresh">_mysql_connector.MySQL.refresh() Method</a></dt><dt>_mysql_connector.MySQL.reset_connection(), <a class="indexterm" href="#connector-python-api-cext-reset-connection">_mysql_connector.MySQL.reset_connection() Method</a></dt><dt>_mysql_connector.MySQL.rollback(), <a class="indexterm" href="#connector-python-api-cext-rollback">_mysql_connector.MySQL.rollback() Method</a></dt><dt>_mysql_connector.MySQL.select_db(), <a class="indexterm" href="#connector-python-api-cext-select-db">_mysql_connector.MySQL.select_db() Method</a></dt><dt>_mysql_connector.MySQL.set_character_set(), <a class="indexterm" href="#connector-python-api-cext-set-character-set">_mysql_connector.MySQL.set_character_set() Method</a></dt><dt>_mysql_connector.MySQL.shutdown(), <a class="indexterm" href="#connector-python-api-cext-shutdown">_mysql_connector.MySQL.shutdown() Method</a></dt><dt>_mysql_connector.MySQL.stat(), <a class="indexterm" href="#connector-python-api-cext-stat">_mysql_connector.MySQL.stat() Method</a></dt><dt>_mysql_connector.MySQL.thread_id(), <a class="indexterm" href="#connector-python-api-cext-thread-id">_mysql_connector.MySQL.thread_id() Method</a></dt><dt>_mysql_connector.MySQL.use_unicode(), <a class="indexterm" href="#connector-python-api-cext-use-unicode">_mysql_connector.MySQL.use_unicode() Method</a></dt><dt>_mysql_connector.MySQL.warning_count(), <a class="indexterm" href="#connector-python-api-cext-warning-count">_mysql_connector.MySQL.warning_count() Method</a></dt></dl></dd><dt id="ientry-id3332">module</dt><dd><dl><dt>errorcode, <a class="indexterm" href="#connector-python-api-errorcode">errorcode Module</a></dt><dt>mysql.connector, <a class="indexterm" href="#connector-python-api-mysql-connector">mysql.connector Module</a></dt><dt>_mysql_connector, <a class="indexterm" href="#connector-python-api-cext-mysql-connector">_mysql_connector Module</a></dt></dl></dd><dt id="ientry-id3330">mysql.connector module, <a class="indexterm" href="#connector-python-api-mysql-connector">mysql.connector Module</a></dt><dt id="ientry-id3352">mysql.connector.apilevel property, <a class="indexterm" href="#connector-python-api-mysql-connector-apilevel">mysql.connector.apilevel Property</a></dt><dt id="ientry-id3338">mysql.connector.connect() method, <a class="indexterm" href="#connector-python-api-mysql-connector-connect">mysql.connector.connect() Method</a></dt><dt id="ientry-id3360">mysql.connector.paramstyle property, <a class="indexterm" href="#connector-python-api-mysql-connector-paramstyle">mysql.connector.paramstyle Property</a></dt><dt id="ientry-id3368">mysql.connector.threadsafety property, <a class="indexterm" href="#connector-python-api-mysql-connector-threadsafety">mysql.connector.threadsafety Property</a></dt><dt id="ientry-id3384">mysql.connector.__version_info__ property, <a class="indexterm" href="#connector-python-api-mysql-connector-version-info">mysql.connector.__version_info__ Property</a></dt><dt id="ientry-id3376">mysql.connector.__version__ property, <a class="indexterm" href="#connector-python-api-mysql-connector-version">mysql.connector.__version__ Property</a></dt><dt id="ientry-id3991">MySQLConnection.autocommit property, <a class="indexterm" href="#connector-python-api-mysqlconnection-autocommit">MySQLConnection.autocommit Property</a></dt><dt id="ientry-id4019">MySQLConnection.can_consume_results property, <a class="indexterm" href="#connector-python-api-mysqlconnection-can-consume-results">MySQLConnection.can_consume_results Property</a></dt><dt id="ientry-id4029">MySQLConnection.charset property, <a class="indexterm" href="#connector-python-api-mysqlconnection-charset">MySQLConnection.charset Property</a></dt><dt id="ientry-id4036">MySQLConnection.client_flags property, <a class="indexterm" href="#connector-python-api-mysqlconnection-client-flags">MySQLConnection.client_flags Property</a></dt><dt id="ientry-id3412">MySQLConnection.close() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-close">MySQLConnection.close() Method</a></dt><dt id="ientry-id3546">MySQLConnection.cmd_change_user() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-change-user">MySQLConnection.cmd_change_user() Method</a></dt><dt id="ientry-id3560">MySQLConnection.cmd_debug() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-debug">MySQLConnection.cmd_debug() Method</a></dt><dt id="ientry-id3570">MySQLConnection.cmd_init_db() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-init-db">MySQLConnection.cmd_init_db() Method</a></dt><dt id="ientry-id3580">MySQLConnection.cmd_ping() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-ping">MySQLConnection.cmd_ping() Method</a></dt><dt id="ientry-id3591">MySQLConnection.cmd_process_info() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-info">MySQLConnection.cmd_process_info() Method</a></dt><dt id="ientry-id3603">MySQLConnection.cmd_process_kill() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-kill">MySQLConnection.cmd_process_kill() Method</a></dt><dt id="ientry-id3620">MySQLConnection.cmd_query() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query">MySQLConnection.cmd_query() Method</a></dt><dt id="ientry-id3637">MySQLConnection.cmd_query_iter() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query-iter">MySQLConnection.cmd_query_iter() Method</a></dt><dt id="ientry-id3651">MySQLConnection.cmd_quit() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-quit">MySQLConnection.cmd_quit() Method</a></dt><dt id="ientry-id3659">MySQLConnection.cmd_refresh() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-refresh">MySQLConnection.cmd_refresh() Method</a></dt><dt id="ientry-id3679">MySQLConnection.cmd_reset_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-reset-connection">MySQLConnection.cmd_reset_connection() Method</a></dt><dt id="ientry-id3694">MySQLConnection.cmd_shutdown() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-shutdown">MySQLConnection.cmd_shutdown() Method</a></dt><dt id="ientry-id3706">MySQLConnection.cmd_statistics() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-statistics">MySQLConnection.cmd_statistics() Method</a></dt><dt id="ientry-id4054">MySQLConnection.collation property, <a class="indexterm" href="#connector-python-api-mysqlconnection-collation">MySQLConnection.collation Property</a></dt><dt id="ientry-id3427">MySQLConnection.commit() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-commit">MySQLConnection.commit() Method</a></dt><dt id="ientry-id3438">MySQLConnection.config() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-config">MySQLConnection.config() Method</a></dt><dt id="ientry-id3462">MySQLConnection.connect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-connect">MySQLConnection.connect() Method</a></dt><dt id="ientry-id4061">MySQLConnection.connected property, <a class="indexterm" href="#connector-python-api-mysqlconnection-connected">MySQLConnection.connected Property</a></dt><dt id="ientry-id4074">MySQLConnection.connection_id property, <a class="indexterm" href="#connector-python-api-mysqlconnection-connection-id">MySQLConnection.connection_id Property</a></dt><dt id="ientry-id4082">MySQLConnection.converter-class property, <a class="indexterm" href="#connector-python-api-mysqlconnection-converter-class">MySQLConnection.converter-class Property</a></dt><dt id="ientry-id3482">MySQLConnection.cursor() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cursor">MySQLConnection.cursor() Method</a></dt><dt id="ientry-id4090">MySQLConnection.database property, <a class="indexterm" href="#connector-python-api-mysqlconnection-database">MySQLConnection.database Property</a></dt><dt id="ientry-id3713">MySQLConnection.disconnect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-disconnect">MySQLConnection.disconnect() Method</a></dt><dt id="ientry-id3727">MySQLConnection.get_row() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-row">MySQLConnection.get_row() Method</a></dt><dt id="ientry-id3748">MySQLConnection.get_rows() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-rows">MySQLConnection.get_rows() Method</a></dt><dt id="ientry-id3773">MySQLConnection.get_server_info() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-info">MySQLConnection.get_server_info() Method</a></dt><dt id="ientry-id3786">MySQLConnection.get_server_version() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-version">MySQLConnection.get_server_version() Method</a></dt><dt id="ientry-id4100">MySQLConnection.get_warnings property, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-warnings">MySQLConnection.get_warnings Property</a></dt><dt id="ientry-id4116">MySQLConnection.in_transaction property, <a class="indexterm" href="#connector-python-api-mysqlconnection-in-transaction">MySQLConnection.in_transaction Property</a></dt><dt id="ientry-id3815">MySQLConnection.isset_client_flag() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-isset-client-flag">MySQLConnection.isset_client_flag() Method</a></dt><dt id="ientry-id3798">MySQLConnection.is_connected() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-is-connected">MySQLConnection.is_connected() Method</a></dt><dt id="ientry-id3826">MySQLConnection.ping() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-ping">MySQLConnection.ping() Method</a></dt><dt id="ientry-id4135">MySQLConnection.raise_on_warnings property, <a class="indexterm" href="#connector-python-api-mysqlconnection-raise-on-warnings">MySQLConnection.raise_on_warnings Property</a></dt><dt id="ientry-id3846">MySQLConnection.reconnect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-reconnect">MySQLConnection.reconnect() Method</a></dt><dt id="ientry-id3859">MySQLConnection.reset_session() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-reset-session">MySQLConnection.reset_session() Method</a></dt><dt id="ientry-id3876">MySQLConnection.rollback() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-rollback">MySQLConnection.rollback() Method</a></dt><dt id="ientry-id4156">MySQLConnection.server_host property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-host">MySQLConnection.server_host Property</a></dt><dt id="ientry-id4164">MySQLConnection.server_info property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-info">MySQLConnection.server_info Property</a></dt><dt id="ientry-id4173">MySQLConnection.server_port property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-port">MySQLConnection.server_port Property</a></dt><dt id="ientry-id4181">MySQLConnection.server_version property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-version">MySQLConnection.server_version Property</a></dt><dt id="ientry-id3889">MySQLConnection.set_charset_collation() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-set-charset-collation">MySQLConnection.set_charset_collation() Method</a></dt><dt id="ientry-id3910">MySQLConnection.set_client_flags() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-set-client-flags">MySQLConnection.set_client_flags() Method</a></dt><dt id="ientry-id3932">MySQLConnection.shutdown() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-shutdown">MySQLConnection.shutdown() Method</a></dt><dt id="ientry-id4189">MySQLConnection.sql_mode property, <a class="indexterm" href="#connector-python-api-mysqlconnection-sql-mode">MySQLConnection.sql_mode Property</a></dt><dt id="ientry-id3946">MySQLConnection.start_transaction() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-start-transaction">MySQLConnection.start_transaction() Method</a></dt><dt id="ientry-id4200">MySQLConnection.time_zone property, <a class="indexterm" href="#connector-python-api-mysqlconnection-time-zone">MySQLConnection.time_zone Property</a></dt><dt id="ientry-id4219">MySQLConnection.unix_socket property, <a class="indexterm" href="#connector-python-api-mysqlconnection-unix-socket">MySQLConnection.unix_socket Property</a></dt><dt id="ientry-id4009">MySQLConnection.unread_results property, <a class="indexterm" href="#connector-python-api-mysqlconnection-unread-results">MySQLConnection.unread_results Property</a></dt><dt id="ientry-id4227">MySQLConnection.user property, <a class="indexterm" href="#connector-python-api-mysqlconnection-user">MySQLConnection.user Property</a></dt><dt id="ientry-id4209">MySQLConnection.use_unicode property, <a class="indexterm" href="#connector-python-api-mysqlconnection-use-unicode">MySQLConnection.use_unicode Property</a></dt><dt id="ientry-id4275">MySQLConnectionPool.add_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-add-connection">MySQLConnectionPool.add_connection() Method</a></dt><dt id="ientry-id4294">MySQLConnectionPool.get_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-get-connection">MySQLConnectionPool.get_connection() Method</a></dt><dt id="ientry-id4323">MySQLConnectionPool.pool_name property, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-pool-name">MySQLConnectionPool.pool_name Property</a></dt><dt id="ientry-id4306">MySQLConnectionPool.set_config() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-set-config">MySQLConnectionPool.set_config() Method</a></dt><dt id="ientry-id4475">MySQLCursor.add_attribute() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-add-attribute">MySQLCursor.add_attribute() Method</a></dt><dt id="ientry-id4516">MySQLCursor.callproc() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-callproc">MySQLCursor.callproc() Method</a></dt><dt id="ientry-id4494">MySQLCursor.clear_attributes() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-clear-attributes">MySQLCursor.clear_attributes() Method</a></dt><dt id="ientry-id4543">MySQLCursor.close() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-close">MySQLCursor.close() Method</a></dt><dt id="ientry-id4723">MySQLCursor.column_names property, <a class="indexterm" href="#connector-python-api-mysqlcursor-column-names">MySQLCursor.column_names Property</a></dt><dt id="ientry-id4737">MySQLCursor.description property, <a class="indexterm" href="#connector-python-api-mysqlcursor-description">MySQLCursor.description Property</a></dt><dt id="ientry-id4553">MySQLCursor.execute() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-execute">MySQLCursor.execute() Method</a></dt><dt id="ientry-id4586">MySQLCursor.executemany() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-executemany">MySQLCursor.executemany() Method</a></dt><dt id="ientry-id4615">MySQLCursor.fetchall() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchall">MySQLCursor.fetchall() Method</a></dt><dt id="ientry-id4627">MySQLCursor.fetchmany() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchmany">MySQLCursor.fetchmany() Method</a></dt><dt id="ientry-id4639">MySQLCursor.fetchone() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchone">MySQLCursor.fetchone() Method</a></dt><dt id="ientry-id4673">MySQLCursor.fetchsets() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchsets">MySQLCursor.fetchsets() Method</a></dt><dt id="ientry-id4685">MySQLCursor.fetchwarnings() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchwarnings">MySQLCursor.fetchwarnings() Method</a></dt><dt id="ientry-id4505">MySQLCursor.get_attributes() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-get-attributes">MySQLCursor.get_attributes() Method</a></dt><dt id="ientry-id4774">MySQLCursor.lastrowid property, <a class="indexterm" href="#connector-python-api-mysqlcursor-lastrowid">MySQLCursor.lastrowid Property</a></dt><dt id="ientry-id4659">MySQLCursor.nextset() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-nextset">MySQLCursor.nextset() Method</a></dt><dt id="ientry-id4800">MySQLCursor.rowcount property, <a class="indexterm" href="#connector-python-api-mysqlcursor-rowcount">MySQLCursor.rowcount Property</a></dt><dt id="ientry-id4822">MySQLCursor.statement property, <a class="indexterm" href="#connector-python-api-mysqlcursor-statement">MySQLCursor.statement Property</a></dt><dt id="ientry-id4707">MySQLCursor.stored_results() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-stored-results">MySQLCursor.stored_results() Method</a></dt><dt id="ientry-id4756">MySQLCursor.warnings property, <a class="indexterm" href="#connector-python-api-mysqlcursor-warnings">MySQLCursor.warnings Property</a></dt><dt id="ientry-id4838">MySQLCursor.with_rows property, <a class="indexterm" href="#connector-python-api-mysqlcursor-with-rows">MySQLCursor.with_rows Property</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_P"></a>P</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id1569">PEP 249, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id4381">PooledMySQLConnection.close() method, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-close">PooledMySQLConnection.close() Method</a></dt><dt id="ientry-id4393">PooledMySQLConnection.config() method, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-config">PooledMySQLConnection.config() Method</a></dt><dt id="ientry-id4402">PooledMySQLConnection.pool_name property, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-pool-name">PooledMySQLConnection.pool_name Property</a></dt><dt id="ientry-id4235">pooling.MySQLConnectionPool class, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool">pooling.MySQLConnectionPool Class</a></dt><dt id="ientry-id4242">pooling.MySQLConnectionPool constructor, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-constructor">pooling.MySQLConnectionPool Constructor</a></dt><dt id="ientry-id4334">pooling.PooledMySQLConnection class, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection">pooling.PooledMySQLConnection Class</a></dt><dt id="ientry-id4359">pooling.PooledMySQLConnection constructor, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-constructor">pooling.PooledMySQLConnection Constructor</a></dt><dt id="ientry-id4955">prepared statements, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt id="ientry-id3354">property</dt><dd><dl><dt>mysql.connector.apilevel, <a class="indexterm" href="#connector-python-api-mysql-connector-apilevel">mysql.connector.apilevel Property</a></dt><dt>mysql.connector.paramstyle, <a class="indexterm" href="#connector-python-api-mysql-connector-paramstyle">mysql.connector.paramstyle Property</a></dt><dt>mysql.connector.threadsafety, <a class="indexterm" href="#connector-python-api-mysql-connector-threadsafety">mysql.connector.threadsafety Property</a></dt><dt>mysql.connector.__version_info__, <a class="indexterm" href="#connector-python-api-mysql-connector-version-info">mysql.connector.__version_info__ Property</a></dt><dt>mysql.connector.__version__, <a class="indexterm" href="#connector-python-api-mysql-connector-version">mysql.connector.__version__ Property</a></dt><dt>MySQLConnection.autocommit, <a class="indexterm" href="#connector-python-api-mysqlconnection-autocommit">MySQLConnection.autocommit Property</a></dt><dt>MySQLConnection.can_consume_results, <a class="indexterm" href="#connector-python-api-mysqlconnection-can-consume-results">MySQLConnection.can_consume_results Property</a></dt><dt>MySQLConnection.charset, <a class="indexterm" href="#connector-python-api-mysqlconnection-charset">MySQLConnection.charset Property</a></dt><dt>MySQLConnection.client_flags, <a class="indexterm" href="#connector-python-api-mysqlconnection-client-flags">MySQLConnection.client_flags Property</a></dt><dt>MySQLConnection.collation, <a class="indexterm" href="#connector-python-api-mysqlconnection-collation">MySQLConnection.collation Property</a></dt><dt>MySQLConnection.connected, <a class="indexterm" href="#connector-python-api-mysqlconnection-connected">MySQLConnection.connected Property</a></dt><dt>MySQLConnection.connection_id, <a class="indexterm" href="#connector-python-api-mysqlconnection-connection-id">MySQLConnection.connection_id Property</a></dt><dt>MySQLConnection.converter-class, <a class="indexterm" href="#connector-python-api-mysqlconnection-converter-class">MySQLConnection.converter-class Property</a></dt><dt>MySQLConnection.database, <a class="indexterm" href="#connector-python-api-mysqlconnection-database">MySQLConnection.database Property</a></dt><dt>MySQLConnection.get_warnings, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-warnings">MySQLConnection.get_warnings Property</a></dt><dt>MySQLConnection.in_transaction, <a class="indexterm" href="#connector-python-api-mysqlconnection-in-transaction">MySQLConnection.in_transaction Property</a></dt><dt>MySQLConnection.raise_on_warnings, <a class="indexterm" href="#connector-python-api-mysqlconnection-raise-on-warnings">MySQLConnection.raise_on_warnings Property</a></dt><dt>MySQLConnection.server_host, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-host">MySQLConnection.server_host Property</a></dt><dt>MySQLConnection.server_info, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-info">MySQLConnection.server_info Property</a></dt><dt>MySQLConnection.server_port, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-port">MySQLConnection.server_port Property</a></dt><dt>MySQLConnection.server_version, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-version">MySQLConnection.server_version Property</a></dt><dt>MySQLConnection.sql_mode, <a class="indexterm" href="#connector-python-api-mysqlconnection-sql-mode">MySQLConnection.sql_mode Property</a></dt><dt>MySQLConnection.time_zone, <a class="indexterm" href="#connector-python-api-mysqlconnection-time-zone">MySQLConnection.time_zone Property</a></dt><dt>MySQLConnection.unix_socket, <a class="indexterm" href="#connector-python-api-mysqlconnection-unix-socket">MySQLConnection.unix_socket Property</a></dt><dt>MySQLConnection.unread_results, <a class="indexterm" href="#connector-python-api-mysqlconnection-unread-results">MySQLConnection.unread_results Property</a></dt><dt>MySQLConnection.user, <a class="indexterm" href="#connector-python-api-mysqlconnection-user">MySQLConnection.user Property</a></dt><dt>MySQLConnection.use_unicode, <a class="indexterm" href="#connector-python-api-mysqlconnection-use-unicode">MySQLConnection.use_unicode Property</a></dt><dt>MySQLConnectionPool.pool_name, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-pool-name">MySQLConnectionPool.pool_name Property</a></dt><dt>MySQLCursor.column_names, <a class="indexterm" href="#connector-python-api-mysqlcursor-column-names">MySQLCursor.column_names Property</a></dt><dt>MySQLCursor.description, <a class="indexterm" href="#connector-python-api-mysqlcursor-description">MySQLCursor.description Property</a></dt><dt>MySQLCursor.lastrowid, <a class="indexterm" href="#connector-python-api-mysqlcursor-lastrowid">MySQLCursor.lastrowid Property</a></dt><dt>MySQLCursor.rowcount, <a class="indexterm" href="#connector-python-api-mysqlcursor-rowcount">MySQLCursor.rowcount Property</a></dt><dt>MySQLCursor.statement, <a class="indexterm" href="#connector-python-api-mysqlcursor-statement">MySQLCursor.statement Property</a></dt><dt>MySQLCursor.warnings, <a class="indexterm" href="#connector-python-api-mysqlcursor-warnings">MySQLCursor.warnings Property</a></dt><dt>MySQLCursor.with_rows, <a class="indexterm" href="#connector-python-api-mysqlcursor-with-rows">MySQLCursor.with_rows Property</a></dt><dt>PooledMySQLConnection.pool_name, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-pool-name">PooledMySQLConnection.pool_name Property</a></dt><dt>_mysql_connector.MySQL.have_result_set, <a class="indexterm" href="#connector-python-api-cext-have-result-set">_mysql_connector.MySQL.have_result_set Property</a></dt></dl></dd><dt id="ientry-id1573">Python, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id1567">Python Database API Specification v2.0 (PEP 249), <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_S"></a>S</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id4856">Subclasses cursor.mysqlcursor, <a class="indexterm" href="#connector-python-api-cursor-subclasses">Subclasses cursor.MySQLCursor</a></dt></dl></div></div></div></div><div class="copyright-footer"></div></body></html>
+</p><div class="indexdiv"><h3><a name="connector-python_index0_Symbols"></a>Symbols</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id5489">_mysql_connector module, <a class="indexterm" href="#connector-python-api-cext-mysql-connector">_mysql_connector Module</a></dt><dt id="ientry-id5497">_mysql_connector.MySQL() class, <a class="indexterm" href="#connector-python-api-cext-mysql">_mysql_connector.MySQL() Class</a></dt><dt id="ientry-id5526">_mysql_connector.MySQL.affected_rows() method, <a class="indexterm" href="#connector-python-api-cext-affected-rows">_mysql_connector.MySQL.affected_rows() Method</a></dt><dt id="ientry-id5541">_mysql_connector.MySQL.autocommit() method, <a class="indexterm" href="#connector-python-api-cext-autocommit">_mysql_connector.MySQL.autocommit() Method</a></dt><dt id="ientry-id5556">_mysql_connector.MySQL.buffered() method, <a class="indexterm" href="#connector-python-api-cext-buffered">_mysql_connector.MySQL.buffered() Method</a></dt><dt id="ientry-id5575">_mysql_connector.MySQL.change_user() method, <a class="indexterm" href="#connector-python-api-cext-change-user">_mysql_connector.MySQL.change_user() Method</a></dt><dt id="ientry-id5590">_mysql_connector.MySQL.character_set_name() method, <a class="indexterm" href="#connector-python-api-cext-character-set-name">_mysql_connector.MySQL.character_set_name() Method</a></dt><dt id="ientry-id5602">_mysql_connector.MySQL.close() method, <a class="indexterm" href="#connector-python-api-cext-close">_mysql_connector.MySQL.close() Method</a></dt><dt id="ientry-id5611">_mysql_connector.MySQL.commit() method, <a class="indexterm" href="#connector-python-api-cext-commit">_mysql_connector.MySQL.commit() Method</a></dt><dt id="ientry-id5620">_mysql_connector.MySQL.connect() method, <a class="indexterm" href="#connector-python-api-cext-connect">_mysql_connector.MySQL.connect() Method</a></dt><dt id="ientry-id5652">_mysql_connector.MySQL.connected() method, <a class="indexterm" href="#connector-python-api-cext-connected">_mysql_connector.MySQL.connected() Method</a></dt><dt id="ientry-id5664">_mysql_connector.MySQL.consume_result() method, <a class="indexterm" href="#connector-python-api-cext-consume-result">_mysql_connector.MySQL.consume_result() Method</a></dt><dt id="ientry-id5674">_mysql_connector.MySQL.convert_to_mysql() method, <a class="indexterm" href="#connector-python-api-cext-convert-to-mysql">_mysql_connector.MySQL.convert_to_mysql() Method</a></dt><dt id="ientry-id5687">_mysql_connector.MySQL.escape_string() method, <a class="indexterm" href="#connector-python-api-cext-escape-string">_mysql_connector.MySQL.escape_string() Method</a></dt><dt id="ientry-id5705">_mysql_connector.MySQL.fetch_fields() method, <a class="indexterm" href="#connector-python-api-cext-fetch-fields">_mysql_connector.MySQL.fetch_fields() Method</a></dt><dt id="ientry-id5717">_mysql_connector.MySQL.fetch_row() method, <a class="indexterm" href="#connector-python-api-cext-fetch-row">_mysql_connector.MySQL.fetch_row() Method</a></dt><dt id="ientry-id5730">_mysql_connector.MySQL.field_count() method, <a class="indexterm" href="#connector-python-api-cext-field-count">_mysql_connector.MySQL.field_count() Method</a></dt><dt id="ientry-id5739">_mysql_connector.MySQL.free_result() method, <a class="indexterm" href="#connector-python-api-cext-free-result">_mysql_connector.MySQL.free_result() Method</a></dt><dt id="ientry-id5749">_mysql_connector.MySQL.get_character_set_info() method, <a class="indexterm" href="#connector-python-api-cext-get-character-set-info">_mysql_connector.MySQL.get_character_set_info() Method</a></dt><dt id="ientry-id5765">_mysql_connector.MySQL.get_client_info() method, <a class="indexterm" href="#connector-python-api-cext-get-client-info">_mysql_connector.MySQL.get_client_info() Method</a></dt><dt id="ientry-id5774">_mysql_connector.MySQL.get_client_version() method, <a class="indexterm" href="#connector-python-api-cext-get-client-version">_mysql_connector.MySQL.get_client_version() Method</a></dt><dt id="ientry-id5783">_mysql_connector.MySQL.get_host_info() method, <a class="indexterm" href="#connector-python-api-cext-get-host-info">_mysql_connector.MySQL.get_host_info() Method</a></dt><dt id="ientry-id5792">_mysql_connector.MySQL.get_proto_info() method, <a class="indexterm" href="#connector-python-api-cext-get-proto-info">_mysql_connector.MySQL.get_proto_info() Method</a></dt><dt id="ientry-id5801">_mysql_connector.MySQL.get_server_info() method, <a class="indexterm" href="#connector-python-api-cext-get-server-info">_mysql_connector.MySQL.get_server_info() Method</a></dt><dt id="ientry-id5810">_mysql_connector.MySQL.get_server_version() method, <a class="indexterm" href="#connector-python-api-cext-get-server-version">_mysql_connector.MySQL.get_server_version() Method</a></dt><dt id="ientry-id5819">_mysql_connector.MySQL.get_ssl_cipher() method, <a class="indexterm" href="#connector-python-api-cext-get-ssl-cipher">_mysql_connector.MySQL.get_ssl_cipher() Method</a></dt><dt id="ientry-id6064">_mysql_connector.MySQL.have_result_set property, <a class="indexterm" href="#connector-python-api-cext-have-result-set">_mysql_connector.MySQL.have_result_set Property</a></dt><dt id="ientry-id5829">_mysql_connector.MySQL.hex_string() method, <a class="indexterm" href="#connector-python-api-cext-hex-string">_mysql_connector.MySQL.hex_string() Method</a></dt><dt id="ientry-id5842">_mysql_connector.MySQL.insert_id() method, <a class="indexterm" href="#connector-python-api-cext-insert-id">_mysql_connector.MySQL.insert_id() Method</a></dt><dt id="ientry-id5852">_mysql_connector.MySQL.more_results() method, <a class="indexterm" href="#connector-python-api-cext-more-results">_mysql_connector.MySQL.more_results() Method</a></dt><dt id="ientry-id5863">_mysql_connector.MySQL.next_result() method, <a class="indexterm" href="#connector-python-api-cext-next-result">_mysql_connector.MySQL.next_result() Method</a></dt><dt id="ientry-id5874">_mysql_connector.MySQL.num_fields() method, <a class="indexterm" href="#connector-python-api-cext-num-fields">_mysql_connector.MySQL.num_fields() Method</a></dt><dt id="ientry-id5883">_mysql_connector.MySQL.num_rows() method, <a class="indexterm" href="#connector-python-api-cext-num-rows">_mysql_connector.MySQL.num_rows() Method</a></dt><dt id="ientry-id5894">_mysql_connector.MySQL.ping() method, <a class="indexterm" href="#connector-python-api-cext-ping">_mysql_connector.MySQL.ping() Method</a></dt><dt id="ientry-id5905">_mysql_connector.MySQL.query() method, <a class="indexterm" href="#connector-python-api-cext-query">_mysql_connector.MySQL.query() Method</a></dt><dt id="ientry-id5935">_mysql_connector.MySQL.raw() method, <a class="indexterm" href="#connector-python-api-cext-raw">_mysql_connector.MySQL.raw() Method</a></dt><dt id="ientry-id5950">_mysql_connector.MySQL.refresh() method, <a class="indexterm" href="#connector-python-api-cext-refresh">_mysql_connector.MySQL.refresh() Method</a></dt><dt id="ientry-id5962">_mysql_connector.MySQL.reset_connection() method, <a class="indexterm" href="#connector-python-api-cext-reset-connection">_mysql_connector.MySQL.reset_connection() Method</a></dt><dt id="ientry-id5971">_mysql_connector.MySQL.rollback() method, <a class="indexterm" href="#connector-python-api-cext-rollback">_mysql_connector.MySQL.rollback() Method</a></dt><dt id="ientry-id5982">_mysql_connector.MySQL.select_db() method, <a class="indexterm" href="#connector-python-api-cext-select-db">_mysql_connector.MySQL.select_db() Method</a></dt><dt id="ientry-id5994">_mysql_connector.MySQL.set_character_set() method, <a class="indexterm" href="#connector-python-api-cext-set-character-set">_mysql_connector.MySQL.set_character_set() Method</a></dt><dt id="ientry-id6007">_mysql_connector.MySQL.shutdown() method, <a class="indexterm" href="#connector-python-api-cext-shutdown">_mysql_connector.MySQL.shutdown() Method</a></dt><dt id="ientry-id6020">_mysql_connector.MySQL.stat() method, <a class="indexterm" href="#connector-python-api-cext-stat">_mysql_connector.MySQL.stat() Method</a></dt><dt id="ientry-id6031">_mysql_connector.MySQL.thread_id() method, <a class="indexterm" href="#connector-python-api-cext-thread-id">_mysql_connector.MySQL.thread_id() Method</a></dt><dt id="ientry-id6040">_mysql_connector.MySQL.use_unicode() method, <a class="indexterm" href="#connector-python-api-cext-use-unicode">_mysql_connector.MySQL.use_unicode() Method</a></dt><dt id="ientry-id6055">_mysql_connector.MySQL.warning_count() method, <a class="indexterm" href="#connector-python-api-cext-warning-count">_mysql_connector.MySQL.warning_count() Method</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_C"></a>C</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id3380">class</dt><dd><dl><dt>connection.MySQLConnection, <a class="indexterm" href="#connector-python-api-mysqlconnection">connection.MySQLConnection Class</a></dt><dt>constants.CharacterSet, <a class="indexterm" href="#connector-python-api-characterset">constants.CharacterSet Class</a></dt><dt>constants.ClientFlag, <a class="indexterm" href="#connector-python-api-clientflag">constants.ClientFlag Class</a></dt><dt>constants.FieldType, <a class="indexterm" href="#connector-python-api-fieldtype">constants.FieldType Class</a></dt><dt>constants.RefreshOption, <a class="indexterm" href="#connector-python-api-refreshoption">constants.RefreshOption Class</a></dt><dt>constants.SQLMode, <a class="indexterm" href="#connector-python-api-sqlmode">constants.SQLMode Class</a></dt><dt>cursor.MySQLCursor, <a class="indexterm" href="#connector-python-api-mysqlcursor">cursor.MySQLCursor Class</a></dt><dt>cursor.MySQLCursorBuffered, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffered">cursor.MySQLCursorBuffered Class</a></dt><dt>cursor.MySQLCursorBufferedDict, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffereddict">cursor.MySQLCursorBufferedDict Class</a></dt><dt>cursor.MySQLCursorDict, <a class="indexterm" href="#connector-python-api-mysqlcursordict">cursor.MySQLCursorDict Class</a></dt><dt>cursor.MySQLCursorPrepared, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt>cursor.MySQLCursorRaw, <a class="indexterm" href="#connector-python-api-mysqlcursorraw">cursor.MySQLCursorRaw Class</a></dt><dt>pooling.MySQLConnectionPool, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool">pooling.MySQLConnectionPool Class</a></dt><dt>pooling.PooledMySQLConnection, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection">pooling.PooledMySQLConnection Class</a></dt><dt>_mysql_connector.MySQL(), <a class="indexterm" href="#connector-python-api-cext-mysql">_mysql_connector.MySQL() Class</a></dt></dl></dd><dt id="ientry-id5012">COM_STMT_SEND_LONG_DATA</dt><dd><dl><dt>prepared statements, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt></dl></dd><dt id="ientry-id3378">connection.MySQLConnection class, <a class="indexterm" href="#connector-python-api-mysqlconnection">connection.MySQLConnection Class</a></dt><dt id="ientry-id3386">connection.MySQLConnection() constructor, <a class="indexterm" href="#connector-python-api-mysqlconnection-constructor">connection.MySQLConnection() Constructor</a></dt><dt id="ientry-id1571">Connector/Python, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id5059">constants.CharacterSet class, <a class="indexterm" href="#connector-python-api-characterset">constants.CharacterSet Class</a></dt><dt id="ientry-id5020">constants.ClientFlag class, <a class="indexterm" href="#connector-python-api-clientflag">constants.ClientFlag Class</a></dt><dt id="ientry-id5036">constants.FieldType class, <a class="indexterm" href="#connector-python-api-fieldtype">constants.FieldType Class</a></dt><dt id="ientry-id5069">constants.RefreshOption class, <a class="indexterm" href="#connector-python-api-refreshoption">constants.RefreshOption Class</a></dt><dt id="ientry-id5047">constants.SQLMode class, <a class="indexterm" href="#connector-python-api-sqlmode">constants.SQLMode Class</a></dt><dt id="ientry-id3388">constructor</dt><dd><dl><dt>connection.MySQLConnection(), <a class="indexterm" href="#connector-python-api-mysqlconnection-constructor">connection.MySQLConnection() Constructor</a></dt><dt>cursor.MySQLCursor, <a class="indexterm" href="#connector-python-api-mysqlcursor-constructor">cursor.MySQLCursor Constructor</a></dt><dt>pooling.MySQLConnectionPool, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-constructor">pooling.MySQLConnectionPool Constructor</a></dt><dt>pooling.PooledMySQLConnection, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-constructor">pooling.PooledMySQLConnection Constructor</a></dt></dl></dd><dt id="ientry-id4844">cursor.mysqlcursor</dt><dd><dl><dt>Subclasses, <a class="indexterm" href="#connector-python-api-cursor-subclasses">Subclasses cursor.MySQLCursor</a></dt></dl></dd><dt id="ientry-id4399">cursor.MySQLCursor class, <a class="indexterm" href="#connector-python-api-mysqlcursor">cursor.MySQLCursor Class</a></dt><dt id="ientry-id4441">cursor.MySQLCursor constructor, <a class="indexterm" href="#connector-python-api-mysqlcursor-constructor">cursor.MySQLCursor Constructor</a></dt><dt id="ientry-id4851">cursor.MySQLCursorBuffered class, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffered">cursor.MySQLCursorBuffered Class</a></dt><dt id="ientry-id4918">cursor.MySQLCursorBufferedDict class, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffereddict">cursor.MySQLCursorBufferedDict Class</a></dt><dt id="ientry-id4899">cursor.MySQLCursorDict class, <a class="indexterm" href="#connector-python-api-mysqlcursordict">cursor.MySQLCursorDict Class</a></dt><dt id="ientry-id4936">cursor.MySQLCursorPrepared class, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt id="ientry-id4879">cursor.MySQLCursorRaw class, <a class="indexterm" href="#connector-python-api-mysqlcursorraw">cursor.MySQLCursorRaw Class</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_D"></a>D</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id2948">DYLD_LIBRARY_PATH environment variable, <a class="indexterm" href="#connector-python-cext-development">Application Development with the Connector/Python C Extension</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_E"></a>E</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id2950">environment variable</dt><dd><dl><dt>DYLD_LIBRARY_PATH, <a class="indexterm" href="#connector-python-cext-development">Application Development with the Connector/Python C Extension</a></dt></dl></dd><dt id="ientry-id5295">errorcode module, <a class="indexterm" href="#connector-python-api-errorcode">errorcode Module</a></dt><dt id="ientry-id5453">errors.custom_error_exception() function, <a class="indexterm" href="#connector-python-api-errors-custom-error-exception">errors.custom_error_exception() Function</a></dt><dt id="ientry-id5357">errors.DatabaseError exception, <a class="indexterm" href="#connector-python-api-errors-databaseerror">errors.DatabaseError Exception</a></dt><dt id="ientry-id5345">errors.DataError exception, <a class="indexterm" href="#connector-python-api-errors-dataerror">errors.DataError Exception</a></dt><dt id="ientry-id5305">errors.Error exception, <a class="indexterm" href="#connector-python-api-errors-error">errors.Error Exception</a></dt><dt id="ientry-id5367">errors.IntegrityError exception, <a class="indexterm" href="#connector-python-api-errors-integrityerror">errors.IntegrityError Exception</a></dt><dt id="ientry-id5379">errors.InterfaceError exception, <a class="indexterm" href="#connector-python-api-errors-interfaceerror">errors.InterfaceError Exception</a></dt><dt id="ientry-id5389">errors.InternalError exception, <a class="indexterm" href="#connector-python-api-errors-internalerror">errors.InternalError Exception</a></dt><dt id="ientry-id5399">errors.NotSupportedError exception, <a class="indexterm" href="#connector-python-api-errors-notsupportederror">errors.NotSupportedError Exception</a></dt><dt id="ientry-id5409">errors.OperationalError exception, <a class="indexterm" href="#connector-python-api-errors-operationalerror">errors.OperationalError Exception</a></dt><dt id="ientry-id5419">errors.PoolError exception, <a class="indexterm" href="#connector-python-api-errors-poolerror">errors.PoolError Exception</a></dt><dt id="ientry-id5428">errors.ProgrammingError exception, <a class="indexterm" href="#connector-python-api-errors-programmingerror">errors.ProgrammingError Exception</a></dt><dt id="ientry-id5440">errors.Warning exception, <a class="indexterm" href="#connector-python-api-errors-warning">errors.Warning Exception</a></dt><dt id="ientry-id5307">exception</dt><dd><dl><dt>errors.DatabaseError, <a class="indexterm" href="#connector-python-api-errors-databaseerror">errors.DatabaseError Exception</a></dt><dt>errors.DataError, <a class="indexterm" href="#connector-python-api-errors-dataerror">errors.DataError Exception</a></dt><dt>errors.Error, <a class="indexterm" href="#connector-python-api-errors-error">errors.Error Exception</a></dt><dt>errors.IntegrityError, <a class="indexterm" href="#connector-python-api-errors-integrityerror">errors.IntegrityError Exception</a></dt><dt>errors.InterfaceError, <a class="indexterm" href="#connector-python-api-errors-interfaceerror">errors.InterfaceError Exception</a></dt><dt>errors.InternalError, <a class="indexterm" href="#connector-python-api-errors-internalerror">errors.InternalError Exception</a></dt><dt>errors.NotSupportedError, <a class="indexterm" href="#connector-python-api-errors-notsupportederror">errors.NotSupportedError Exception</a></dt><dt>errors.OperationalError, <a class="indexterm" href="#connector-python-api-errors-operationalerror">errors.OperationalError Exception</a></dt><dt>errors.PoolError, <a class="indexterm" href="#connector-python-api-errors-poolerror">errors.PoolError Exception</a></dt><dt>errors.ProgrammingError, <a class="indexterm" href="#connector-python-api-errors-programmingerror">errors.ProgrammingError Exception</a></dt><dt>errors.Warning, <a class="indexterm" href="#connector-python-api-errors-warning">errors.Warning Exception</a></dt></dl></dd></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_F"></a>F</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id5455">function</dt><dd><dl><dt>errors.custom_error_exception(), <a class="indexterm" href="#connector-python-api-errors-custom-error-exception">errors.custom_error_exception() Function</a></dt></dl></dd></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_M"></a>M</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id3326">method</dt><dd><dl><dt>mysql.connector.connect(), <a class="indexterm" href="#connector-python-api-mysql-connector-connect">mysql.connector.connect() Method</a></dt><dt>MySQLConnection.close(), <a class="indexterm" href="#connector-python-api-mysqlconnection-close">MySQLConnection.close() Method</a></dt><dt>MySQLConnection.cmd_change_user(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-change-user">MySQLConnection.cmd_change_user() Method</a></dt><dt>MySQLConnection.cmd_debug(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-debug">MySQLConnection.cmd_debug() Method</a></dt><dt>MySQLConnection.cmd_init_db(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-init-db">MySQLConnection.cmd_init_db() Method</a></dt><dt>MySQLConnection.cmd_ping(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-ping">MySQLConnection.cmd_ping() Method</a></dt><dt>MySQLConnection.cmd_process_info(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-info">MySQLConnection.cmd_process_info() Method</a></dt><dt>MySQLConnection.cmd_process_kill(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-kill">MySQLConnection.cmd_process_kill() Method</a></dt><dt>MySQLConnection.cmd_query(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query">MySQLConnection.cmd_query() Method</a></dt><dt>MySQLConnection.cmd_query_iter(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query-iter">MySQLConnection.cmd_query_iter() Method</a></dt><dt>MySQLConnection.cmd_quit(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-quit">MySQLConnection.cmd_quit() Method</a></dt><dt>MySQLConnection.cmd_refresh(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-refresh">MySQLConnection.cmd_refresh() Method</a></dt><dt>MySQLConnection.cmd_reset_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-reset-connection">MySQLConnection.cmd_reset_connection() Method</a></dt><dt>MySQLConnection.cmd_shutdown(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-shutdown">MySQLConnection.cmd_shutdown() Method</a></dt><dt>MySQLConnection.cmd_statistics(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-statistics">MySQLConnection.cmd_statistics() Method</a></dt><dt>MySQLConnection.commit(), <a class="indexterm" href="#connector-python-api-mysqlconnection-commit">MySQLConnection.commit() Method</a></dt><dt>MySQLConnection.config(), <a class="indexterm" href="#connector-python-api-mysqlconnection-config">MySQLConnection.config() Method</a></dt><dt>MySQLConnection.connect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-connect">MySQLConnection.connect() Method</a></dt><dt>MySQLConnection.cursor(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cursor">MySQLConnection.cursor() Method</a></dt><dt>MySQLConnection.disconnect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-disconnect">MySQLConnection.disconnect() Method</a></dt><dt>MySQLConnection.get_row(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-row">MySQLConnection.get_row() Method</a></dt><dt>MySQLConnection.get_rows(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-rows">MySQLConnection.get_rows() Method</a></dt><dt>MySQLConnection.get_server_info(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-info">MySQLConnection.get_server_info() Method</a></dt><dt>MySQLConnection.get_server_version(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-version">MySQLConnection.get_server_version() Method</a></dt><dt>MySQLConnection.isset_client_flag(), <a class="indexterm" href="#connector-python-api-mysqlconnection-isset-client-flag">MySQLConnection.isset_client_flag() Method</a></dt><dt>MySQLConnection.is_connected(), <a class="indexterm" href="#connector-python-api-mysqlconnection-is-connected">MySQLConnection.is_connected() Method</a></dt><dt>MySQLConnection.ping(), <a class="indexterm" href="#connector-python-api-mysqlconnection-ping">MySQLConnection.ping() Method</a></dt><dt>MySQLConnection.reconnect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-reconnect">MySQLConnection.reconnect() Method</a></dt><dt>MySQLConnection.reset_session(), <a class="indexterm" href="#connector-python-api-mysqlconnection-reset-session">MySQLConnection.reset_session() Method</a></dt><dt>MySQLConnection.rollback(), <a class="indexterm" href="#connector-python-api-mysqlconnection-rollback">MySQLConnection.rollback() Method</a></dt><dt>MySQLConnection.set_charset_collation(), <a class="indexterm" href="#connector-python-api-mysqlconnection-set-charset-collation">MySQLConnection.set_charset_collation() Method</a></dt><dt>MySQLConnection.set_client_flags(), <a class="indexterm" href="#connector-python-api-mysqlconnection-set-client-flags">MySQLConnection.set_client_flags() Method</a></dt><dt>MySQLConnection.shutdown(), <a class="indexterm" href="#connector-python-api-mysqlconnection-shutdown">MySQLConnection.shutdown() Method</a></dt><dt>MySQLConnection.start_transaction(), <a class="indexterm" href="#connector-python-api-mysqlconnection-start-transaction">MySQLConnection.start_transaction() Method</a></dt><dt>MySQLConnectionPool.add_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-add-connection">MySQLConnectionPool.add_connection() Method</a></dt><dt>MySQLConnectionPool.get_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-get-connection">MySQLConnectionPool.get_connection() Method</a></dt><dt>MySQLConnectionPool.set_config(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-set-config">MySQLConnectionPool.set_config() Method</a></dt><dt>MySQLCursor.add_attribute(), <a class="indexterm" href="#connector-python-api-mysqlcursor-add-attribute">MySQLCursor.add_attribute() Method</a></dt><dt>MySQLCursor.callproc(), <a class="indexterm" href="#connector-python-api-mysqlcursor-callproc">MySQLCursor.callproc() Method</a></dt><dt>MySQLCursor.clear_attributes(), <a class="indexterm" href="#connector-python-api-mysqlcursor-clear-attributes">MySQLCursor.clear_attributes() Method</a></dt><dt>MySQLCursor.close(), <a class="indexterm" href="#connector-python-api-mysqlcursor-close">MySQLCursor.close() Method</a></dt><dt>MySQLCursor.execute(), <a class="indexterm" href="#connector-python-api-mysqlcursor-execute">MySQLCursor.execute() Method</a></dt><dt>MySQLCursor.executemany(), <a class="indexterm" href="#connector-python-api-mysqlcursor-executemany">MySQLCursor.executemany() Method</a></dt><dt>MySQLCursor.fetchall(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchall">MySQLCursor.fetchall() Method</a></dt><dt>MySQLCursor.fetchmany(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchmany">MySQLCursor.fetchmany() Method</a></dt><dt>MySQLCursor.fetchone(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchone">MySQLCursor.fetchone() Method</a></dt><dt>MySQLCursor.fetchsets(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchsets">MySQLCursor.fetchsets() Method</a></dt><dt>MySQLCursor.fetchwarnings(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchwarnings">MySQLCursor.fetchwarnings() Method</a></dt><dt>MySQLCursor.get_attributes(), <a class="indexterm" href="#connector-python-api-mysqlcursor-get-attributes">MySQLCursor.get_attributes() Method</a></dt><dt>MySQLCursor.nextset(), <a class="indexterm" href="#connector-python-api-mysqlcursor-nextset">MySQLCursor.nextset() Method</a></dt><dt>MySQLCursor.stored_results(), <a class="indexterm" href="#connector-python-api-mysqlcursor-stored-results">MySQLCursor.stored_results() Method</a></dt><dt>PooledMySQLConnection.close(), <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-close">PooledMySQLConnection.close() Method</a></dt><dt>PooledMySQLConnection.config(), <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-config">PooledMySQLConnection.config() Method</a></dt><dt>_mysql_connector.MySQL.affected_rows(), <a class="indexterm" href="#connector-python-api-cext-affected-rows">_mysql_connector.MySQL.affected_rows() Method</a></dt><dt>_mysql_connector.MySQL.autocommit(), <a class="indexterm" href="#connector-python-api-cext-autocommit">_mysql_connector.MySQL.autocommit() Method</a></dt><dt>_mysql_connector.MySQL.buffered(), <a class="indexterm" href="#connector-python-api-cext-buffered">_mysql_connector.MySQL.buffered() Method</a></dt><dt>_mysql_connector.MySQL.change_user(), <a class="indexterm" href="#connector-python-api-cext-change-user">_mysql_connector.MySQL.change_user() Method</a></dt><dt>_mysql_connector.MySQL.character_set_name(), <a class="indexterm" href="#connector-python-api-cext-character-set-name">_mysql_connector.MySQL.character_set_name() Method</a></dt><dt>_mysql_connector.MySQL.close(), <a class="indexterm" href="#connector-python-api-cext-close">_mysql_connector.MySQL.close() Method</a></dt><dt>_mysql_connector.MySQL.commit(), <a class="indexterm" href="#connector-python-api-cext-commit">_mysql_connector.MySQL.commit() Method</a></dt><dt>_mysql_connector.MySQL.connect(), <a class="indexterm" href="#connector-python-api-cext-connect">_mysql_connector.MySQL.connect() Method</a></dt><dt>_mysql_connector.MySQL.connected(), <a class="indexterm" href="#connector-python-api-cext-connected">_mysql_connector.MySQL.connected() Method</a></dt><dt>_mysql_connector.MySQL.consume_result(), <a class="indexterm" href="#connector-python-api-cext-consume-result">_mysql_connector.MySQL.consume_result() Method</a></dt><dt>_mysql_connector.MySQL.convert_to_mysql(), <a class="indexterm" href="#connector-python-api-cext-convert-to-mysql">_mysql_connector.MySQL.convert_to_mysql() Method</a></dt><dt>_mysql_connector.MySQL.escape_string(), <a class="indexterm" href="#connector-python-api-cext-escape-string">_mysql_connector.MySQL.escape_string() Method</a></dt><dt>_mysql_connector.MySQL.fetch_fields(), <a class="indexterm" href="#connector-python-api-cext-fetch-fields">_mysql_connector.MySQL.fetch_fields() Method</a></dt><dt>_mysql_connector.MySQL.fetch_row(), <a class="indexterm" href="#connector-python-api-cext-fetch-row">_mysql_connector.MySQL.fetch_row() Method</a></dt><dt>_mysql_connector.MySQL.field_count(), <a class="indexterm" href="#connector-python-api-cext-field-count">_mysql_connector.MySQL.field_count() Method</a></dt><dt>_mysql_connector.MySQL.free_result(), <a class="indexterm" href="#connector-python-api-cext-free-result">_mysql_connector.MySQL.free_result() Method</a></dt><dt>_mysql_connector.MySQL.get_character_set_info(), <a class="indexterm" href="#connector-python-api-cext-get-character-set-info">_mysql_connector.MySQL.get_character_set_info() Method</a></dt><dt>_mysql_connector.MySQL.get_client_info(), <a class="indexterm" href="#connector-python-api-cext-get-client-info">_mysql_connector.MySQL.get_client_info() Method</a></dt><dt>_mysql_connector.MySQL.get_client_version(), <a class="indexterm" href="#connector-python-api-cext-get-client-version">_mysql_connector.MySQL.get_client_version() Method</a></dt><dt>_mysql_connector.MySQL.get_host_info(), <a class="indexterm" href="#connector-python-api-cext-get-host-info">_mysql_connector.MySQL.get_host_info() Method</a></dt><dt>_mysql_connector.MySQL.get_proto_info(), <a class="indexterm" href="#connector-python-api-cext-get-proto-info">_mysql_connector.MySQL.get_proto_info() Method</a></dt><dt>_mysql_connector.MySQL.get_server_info(), <a class="indexterm" href="#connector-python-api-cext-get-server-info">_mysql_connector.MySQL.get_server_info() Method</a></dt><dt>_mysql_connector.MySQL.get_server_version(), <a class="indexterm" href="#connector-python-api-cext-get-server-version">_mysql_connector.MySQL.get_server_version() Method</a></dt><dt>_mysql_connector.MySQL.get_ssl_cipher(), <a class="indexterm" href="#connector-python-api-cext-get-ssl-cipher">_mysql_connector.MySQL.get_ssl_cipher() Method</a></dt><dt>_mysql_connector.MySQL.hex_string(), <a class="indexterm" href="#connector-python-api-cext-hex-string">_mysql_connector.MySQL.hex_string() Method</a></dt><dt>_mysql_connector.MySQL.insert_id(), <a class="indexterm" href="#connector-python-api-cext-insert-id">_mysql_connector.MySQL.insert_id() Method</a></dt><dt>_mysql_connector.MySQL.more_results(), <a class="indexterm" href="#connector-python-api-cext-more-results">_mysql_connector.MySQL.more_results() Method</a></dt><dt>_mysql_connector.MySQL.next_result(), <a class="indexterm" href="#connector-python-api-cext-next-result">_mysql_connector.MySQL.next_result() Method</a></dt><dt>_mysql_connector.MySQL.num_fields(), <a class="indexterm" href="#connector-python-api-cext-num-fields">_mysql_connector.MySQL.num_fields() Method</a></dt><dt>_mysql_connector.MySQL.num_rows(), <a class="indexterm" href="#connector-python-api-cext-num-rows">_mysql_connector.MySQL.num_rows() Method</a></dt><dt>_mysql_connector.MySQL.ping(), <a class="indexterm" href="#connector-python-api-cext-ping">_mysql_connector.MySQL.ping() Method</a></dt><dt>_mysql_connector.MySQL.query(), <a class="indexterm" href="#connector-python-api-cext-query">_mysql_connector.MySQL.query() Method</a></dt><dt>_mysql_connector.MySQL.raw(), <a class="indexterm" href="#connector-python-api-cext-raw">_mysql_connector.MySQL.raw() Method</a></dt><dt>_mysql_connector.MySQL.refresh(), <a class="indexterm" href="#connector-python-api-cext-refresh">_mysql_connector.MySQL.refresh() Method</a></dt><dt>_mysql_connector.MySQL.reset_connection(), <a class="indexterm" href="#connector-python-api-cext-reset-connection">_mysql_connector.MySQL.reset_connection() Method</a></dt><dt>_mysql_connector.MySQL.rollback(), <a class="indexterm" href="#connector-python-api-cext-rollback">_mysql_connector.MySQL.rollback() Method</a></dt><dt>_mysql_connector.MySQL.select_db(), <a class="indexterm" href="#connector-python-api-cext-select-db">_mysql_connector.MySQL.select_db() Method</a></dt><dt>_mysql_connector.MySQL.set_character_set(), <a class="indexterm" href="#connector-python-api-cext-set-character-set">_mysql_connector.MySQL.set_character_set() Method</a></dt><dt>_mysql_connector.MySQL.shutdown(), <a class="indexterm" href="#connector-python-api-cext-shutdown">_mysql_connector.MySQL.shutdown() Method</a></dt><dt>_mysql_connector.MySQL.stat(), <a class="indexterm" href="#connector-python-api-cext-stat">_mysql_connector.MySQL.stat() Method</a></dt><dt>_mysql_connector.MySQL.thread_id(), <a class="indexterm" href="#connector-python-api-cext-thread-id">_mysql_connector.MySQL.thread_id() Method</a></dt><dt>_mysql_connector.MySQL.use_unicode(), <a class="indexterm" href="#connector-python-api-cext-use-unicode">_mysql_connector.MySQL.use_unicode() Method</a></dt><dt>_mysql_connector.MySQL.warning_count(), <a class="indexterm" href="#connector-python-api-cext-warning-count">_mysql_connector.MySQL.warning_count() Method</a></dt></dl></dd><dt id="ientry-id3318">module</dt><dd><dl><dt>errorcode, <a class="indexterm" href="#connector-python-api-errorcode">errorcode Module</a></dt><dt>mysql.connector, <a class="indexterm" href="#connector-python-api-mysql-connector">mysql.connector Module</a></dt><dt>_mysql_connector, <a class="indexterm" href="#connector-python-api-cext-mysql-connector">_mysql_connector Module</a></dt></dl></dd><dt id="ientry-id3316">mysql.connector module, <a class="indexterm" href="#connector-python-api-mysql-connector">mysql.connector Module</a></dt><dt id="ientry-id3338">mysql.connector.apilevel property, <a class="indexterm" href="#connector-python-api-mysql-connector-apilevel">mysql.connector.apilevel Property</a></dt><dt id="ientry-id3324">mysql.connector.connect() method, <a class="indexterm" href="#connector-python-api-mysql-connector-connect">mysql.connector.connect() Method</a></dt><dt id="ientry-id3346">mysql.connector.paramstyle property, <a class="indexterm" href="#connector-python-api-mysql-connector-paramstyle">mysql.connector.paramstyle Property</a></dt><dt id="ientry-id3354">mysql.connector.threadsafety property, <a class="indexterm" href="#connector-python-api-mysql-connector-threadsafety">mysql.connector.threadsafety Property</a></dt><dt id="ientry-id3370">mysql.connector.__version_info__ property, <a class="indexterm" href="#connector-python-api-mysql-connector-version-info">mysql.connector.__version_info__ Property</a></dt><dt id="ientry-id3362">mysql.connector.__version__ property, <a class="indexterm" href="#connector-python-api-mysql-connector-version">mysql.connector.__version__ Property</a></dt><dt id="ientry-id3977">MySQLConnection.autocommit property, <a class="indexterm" href="#connector-python-api-mysqlconnection-autocommit">MySQLConnection.autocommit Property</a></dt><dt id="ientry-id4005">MySQLConnection.can_consume_results property, <a class="indexterm" href="#connector-python-api-mysqlconnection-can-consume-results">MySQLConnection.can_consume_results Property</a></dt><dt id="ientry-id4015">MySQLConnection.charset property, <a class="indexterm" href="#connector-python-api-mysqlconnection-charset">MySQLConnection.charset Property</a></dt><dt id="ientry-id4022">MySQLConnection.client_flags property, <a class="indexterm" href="#connector-python-api-mysqlconnection-client-flags">MySQLConnection.client_flags Property</a></dt><dt id="ientry-id3398">MySQLConnection.close() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-close">MySQLConnection.close() Method</a></dt><dt id="ientry-id3532">MySQLConnection.cmd_change_user() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-change-user">MySQLConnection.cmd_change_user() Method</a></dt><dt id="ientry-id3546">MySQLConnection.cmd_debug() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-debug">MySQLConnection.cmd_debug() Method</a></dt><dt id="ientry-id3556">MySQLConnection.cmd_init_db() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-init-db">MySQLConnection.cmd_init_db() Method</a></dt><dt id="ientry-id3566">MySQLConnection.cmd_ping() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-ping">MySQLConnection.cmd_ping() Method</a></dt><dt id="ientry-id3577">MySQLConnection.cmd_process_info() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-info">MySQLConnection.cmd_process_info() Method</a></dt><dt id="ientry-id3589">MySQLConnection.cmd_process_kill() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-kill">MySQLConnection.cmd_process_kill() Method</a></dt><dt id="ientry-id3606">MySQLConnection.cmd_query() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query">MySQLConnection.cmd_query() Method</a></dt><dt id="ientry-id3623">MySQLConnection.cmd_query_iter() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query-iter">MySQLConnection.cmd_query_iter() Method</a></dt><dt id="ientry-id3637">MySQLConnection.cmd_quit() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-quit">MySQLConnection.cmd_quit() Method</a></dt><dt id="ientry-id3645">MySQLConnection.cmd_refresh() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-refresh">MySQLConnection.cmd_refresh() Method</a></dt><dt id="ientry-id3665">MySQLConnection.cmd_reset_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-reset-connection">MySQLConnection.cmd_reset_connection() Method</a></dt><dt id="ientry-id3680">MySQLConnection.cmd_shutdown() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-shutdown">MySQLConnection.cmd_shutdown() Method</a></dt><dt id="ientry-id3692">MySQLConnection.cmd_statistics() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-statistics">MySQLConnection.cmd_statistics() Method</a></dt><dt id="ientry-id4040">MySQLConnection.collation property, <a class="indexterm" href="#connector-python-api-mysqlconnection-collation">MySQLConnection.collation Property</a></dt><dt id="ientry-id3413">MySQLConnection.commit() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-commit">MySQLConnection.commit() Method</a></dt><dt id="ientry-id3424">MySQLConnection.config() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-config">MySQLConnection.config() Method</a></dt><dt id="ientry-id3448">MySQLConnection.connect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-connect">MySQLConnection.connect() Method</a></dt><dt id="ientry-id4047">MySQLConnection.connected property, <a class="indexterm" href="#connector-python-api-mysqlconnection-connected">MySQLConnection.connected Property</a></dt><dt id="ientry-id4060">MySQLConnection.connection_id property, <a class="indexterm" href="#connector-python-api-mysqlconnection-connection-id">MySQLConnection.connection_id Property</a></dt><dt id="ientry-id4068">MySQLConnection.converter-class property, <a class="indexterm" href="#connector-python-api-mysqlconnection-converter-class">MySQLConnection.converter-class Property</a></dt><dt id="ientry-id3468">MySQLConnection.cursor() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cursor">MySQLConnection.cursor() Method</a></dt><dt id="ientry-id4076">MySQLConnection.database property, <a class="indexterm" href="#connector-python-api-mysqlconnection-database">MySQLConnection.database Property</a></dt><dt id="ientry-id3699">MySQLConnection.disconnect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-disconnect">MySQLConnection.disconnect() Method</a></dt><dt id="ientry-id3713">MySQLConnection.get_row() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-row">MySQLConnection.get_row() Method</a></dt><dt id="ientry-id3734">MySQLConnection.get_rows() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-rows">MySQLConnection.get_rows() Method</a></dt><dt id="ientry-id3759">MySQLConnection.get_server_info() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-info">MySQLConnection.get_server_info() Method</a></dt><dt id="ientry-id3772">MySQLConnection.get_server_version() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-version">MySQLConnection.get_server_version() Method</a></dt><dt id="ientry-id4086">MySQLConnection.get_warnings property, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-warnings">MySQLConnection.get_warnings Property</a></dt><dt id="ientry-id4102">MySQLConnection.in_transaction property, <a class="indexterm" href="#connector-python-api-mysqlconnection-in-transaction">MySQLConnection.in_transaction Property</a></dt><dt id="ientry-id3801">MySQLConnection.isset_client_flag() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-isset-client-flag">MySQLConnection.isset_client_flag() Method</a></dt><dt id="ientry-id3784">MySQLConnection.is_connected() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-is-connected">MySQLConnection.is_connected() Method</a></dt><dt id="ientry-id3812">MySQLConnection.ping() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-ping">MySQLConnection.ping() Method</a></dt><dt id="ientry-id4121">MySQLConnection.raise_on_warnings property, <a class="indexterm" href="#connector-python-api-mysqlconnection-raise-on-warnings">MySQLConnection.raise_on_warnings Property</a></dt><dt id="ientry-id3832">MySQLConnection.reconnect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-reconnect">MySQLConnection.reconnect() Method</a></dt><dt id="ientry-id3845">MySQLConnection.reset_session() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-reset-session">MySQLConnection.reset_session() Method</a></dt><dt id="ientry-id3862">MySQLConnection.rollback() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-rollback">MySQLConnection.rollback() Method</a></dt><dt id="ientry-id4142">MySQLConnection.server_host property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-host">MySQLConnection.server_host Property</a></dt><dt id="ientry-id4150">MySQLConnection.server_info property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-info">MySQLConnection.server_info Property</a></dt><dt id="ientry-id4159">MySQLConnection.server_port property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-port">MySQLConnection.server_port Property</a></dt><dt id="ientry-id4167">MySQLConnection.server_version property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-version">MySQLConnection.server_version Property</a></dt><dt id="ientry-id3875">MySQLConnection.set_charset_collation() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-set-charset-collation">MySQLConnection.set_charset_collation() Method</a></dt><dt id="ientry-id3896">MySQLConnection.set_client_flags() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-set-client-flags">MySQLConnection.set_client_flags() Method</a></dt><dt id="ientry-id3918">MySQLConnection.shutdown() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-shutdown">MySQLConnection.shutdown() Method</a></dt><dt id="ientry-id4175">MySQLConnection.sql_mode property, <a class="indexterm" href="#connector-python-api-mysqlconnection-sql-mode">MySQLConnection.sql_mode Property</a></dt><dt id="ientry-id3932">MySQLConnection.start_transaction() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-start-transaction">MySQLConnection.start_transaction() Method</a></dt><dt id="ientry-id4186">MySQLConnection.time_zone property, <a class="indexterm" href="#connector-python-api-mysqlconnection-time-zone">MySQLConnection.time_zone Property</a></dt><dt id="ientry-id4205">MySQLConnection.unix_socket property, <a class="indexterm" href="#connector-python-api-mysqlconnection-unix-socket">MySQLConnection.unix_socket Property</a></dt><dt id="ientry-id3995">MySQLConnection.unread_results property, <a class="indexterm" href="#connector-python-api-mysqlconnection-unread-results">MySQLConnection.unread_results Property</a></dt><dt id="ientry-id4213">MySQLConnection.user property, <a class="indexterm" href="#connector-python-api-mysqlconnection-user">MySQLConnection.user Property</a></dt><dt id="ientry-id4195">MySQLConnection.use_unicode property, <a class="indexterm" href="#connector-python-api-mysqlconnection-use-unicode">MySQLConnection.use_unicode Property</a></dt><dt id="ientry-id4261">MySQLConnectionPool.add_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-add-connection">MySQLConnectionPool.add_connection() Method</a></dt><dt id="ientry-id4280">MySQLConnectionPool.get_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-get-connection">MySQLConnectionPool.get_connection() Method</a></dt><dt id="ientry-id4309">MySQLConnectionPool.pool_name property, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-pool-name">MySQLConnectionPool.pool_name Property</a></dt><dt id="ientry-id4292">MySQLConnectionPool.set_config() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-set-config">MySQLConnectionPool.set_config() Method</a></dt><dt id="ientry-id4461">MySQLCursor.add_attribute() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-add-attribute">MySQLCursor.add_attribute() Method</a></dt><dt id="ientry-id4502">MySQLCursor.callproc() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-callproc">MySQLCursor.callproc() Method</a></dt><dt id="ientry-id4480">MySQLCursor.clear_attributes() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-clear-attributes">MySQLCursor.clear_attributes() Method</a></dt><dt id="ientry-id4529">MySQLCursor.close() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-close">MySQLCursor.close() Method</a></dt><dt id="ientry-id4709">MySQLCursor.column_names property, <a class="indexterm" href="#connector-python-api-mysqlcursor-column-names">MySQLCursor.column_names Property</a></dt><dt id="ientry-id4723">MySQLCursor.description property, <a class="indexterm" href="#connector-python-api-mysqlcursor-description">MySQLCursor.description Property</a></dt><dt id="ientry-id4539">MySQLCursor.execute() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-execute">MySQLCursor.execute() Method</a></dt><dt id="ientry-id4572">MySQLCursor.executemany() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-executemany">MySQLCursor.executemany() Method</a></dt><dt id="ientry-id4601">MySQLCursor.fetchall() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchall">MySQLCursor.fetchall() Method</a></dt><dt id="ientry-id4613">MySQLCursor.fetchmany() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchmany">MySQLCursor.fetchmany() Method</a></dt><dt id="ientry-id4625">MySQLCursor.fetchone() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchone">MySQLCursor.fetchone() Method</a></dt><dt id="ientry-id4659">MySQLCursor.fetchsets() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchsets">MySQLCursor.fetchsets() Method</a></dt><dt id="ientry-id4671">MySQLCursor.fetchwarnings() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchwarnings">MySQLCursor.fetchwarnings() Method</a></dt><dt id="ientry-id4491">MySQLCursor.get_attributes() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-get-attributes">MySQLCursor.get_attributes() Method</a></dt><dt id="ientry-id4760">MySQLCursor.lastrowid property, <a class="indexterm" href="#connector-python-api-mysqlcursor-lastrowid">MySQLCursor.lastrowid Property</a></dt><dt id="ientry-id4645">MySQLCursor.nextset() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-nextset">MySQLCursor.nextset() Method</a></dt><dt id="ientry-id4786">MySQLCursor.rowcount property, <a class="indexterm" href="#connector-python-api-mysqlcursor-rowcount">MySQLCursor.rowcount Property</a></dt><dt id="ientry-id4808">MySQLCursor.statement property, <a class="indexterm" href="#connector-python-api-mysqlcursor-statement">MySQLCursor.statement Property</a></dt><dt id="ientry-id4693">MySQLCursor.stored_results() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-stored-results">MySQLCursor.stored_results() Method</a></dt><dt id="ientry-id4742">MySQLCursor.warnings property, <a class="indexterm" href="#connector-python-api-mysqlcursor-warnings">MySQLCursor.warnings Property</a></dt><dt id="ientry-id4824">MySQLCursor.with_rows property, <a class="indexterm" href="#connector-python-api-mysqlcursor-with-rows">MySQLCursor.with_rows Property</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_P"></a>P</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id1569">PEP 249, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id4367">PooledMySQLConnection.close() method, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-close">PooledMySQLConnection.close() Method</a></dt><dt id="ientry-id4379">PooledMySQLConnection.config() method, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-config">PooledMySQLConnection.config() Method</a></dt><dt id="ientry-id4388">PooledMySQLConnection.pool_name property, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-pool-name">PooledMySQLConnection.pool_name Property</a></dt><dt id="ientry-id4221">pooling.MySQLConnectionPool class, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool">pooling.MySQLConnectionPool Class</a></dt><dt id="ientry-id4228">pooling.MySQLConnectionPool constructor, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-constructor">pooling.MySQLConnectionPool Constructor</a></dt><dt id="ientry-id4320">pooling.PooledMySQLConnection class, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection">pooling.PooledMySQLConnection Class</a></dt><dt id="ientry-id4345">pooling.PooledMySQLConnection constructor, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-constructor">pooling.PooledMySQLConnection Constructor</a></dt><dt id="ientry-id4941">prepared statements, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt id="ientry-id3340">property</dt><dd><dl><dt>mysql.connector.apilevel, <a class="indexterm" href="#connector-python-api-mysql-connector-apilevel">mysql.connector.apilevel Property</a></dt><dt>mysql.connector.paramstyle, <a class="indexterm" href="#connector-python-api-mysql-connector-paramstyle">mysql.connector.paramstyle Property</a></dt><dt>mysql.connector.threadsafety, <a class="indexterm" href="#connector-python-api-mysql-connector-threadsafety">mysql.connector.threadsafety Property</a></dt><dt>mysql.connector.__version_info__, <a class="indexterm" href="#connector-python-api-mysql-connector-version-info">mysql.connector.__version_info__ Property</a></dt><dt>mysql.connector.__version__, <a class="indexterm" href="#connector-python-api-mysql-connector-version">mysql.connector.__version__ Property</a></dt><dt>MySQLConnection.autocommit, <a class="indexterm" href="#connector-python-api-mysqlconnection-autocommit">MySQLConnection.autocommit Property</a></dt><dt>MySQLConnection.can_consume_results, <a class="indexterm" href="#connector-python-api-mysqlconnection-can-consume-results">MySQLConnection.can_consume_results Property</a></dt><dt>MySQLConnection.charset, <a class="indexterm" href="#connector-python-api-mysqlconnection-charset">MySQLConnection.charset Property</a></dt><dt>MySQLConnection.client_flags, <a class="indexterm" href="#connector-python-api-mysqlconnection-client-flags">MySQLConnection.client_flags Property</a></dt><dt>MySQLConnection.collation, <a class="indexterm" href="#connector-python-api-mysqlconnection-collation">MySQLConnection.collation Property</a></dt><dt>MySQLConnection.connected, <a class="indexterm" href="#connector-python-api-mysqlconnection-connected">MySQLConnection.connected Property</a></dt><dt>MySQLConnection.connection_id, <a class="indexterm" href="#connector-python-api-mysqlconnection-connection-id">MySQLConnection.connection_id Property</a></dt><dt>MySQLConnection.converter-class, <a class="indexterm" href="#connector-python-api-mysqlconnection-converter-class">MySQLConnection.converter-class Property</a></dt><dt>MySQLConnection.database, <a class="indexterm" href="#connector-python-api-mysqlconnection-database">MySQLConnection.database Property</a></dt><dt>MySQLConnection.get_warnings, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-warnings">MySQLConnection.get_warnings Property</a></dt><dt>MySQLConnection.in_transaction, <a class="indexterm" href="#connector-python-api-mysqlconnection-in-transaction">MySQLConnection.in_transaction Property</a></dt><dt>MySQLConnection.raise_on_warnings, <a class="indexterm" href="#connector-python-api-mysqlconnection-raise-on-warnings">MySQLConnection.raise_on_warnings Property</a></dt><dt>MySQLConnection.server_host, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-host">MySQLConnection.server_host Property</a></dt><dt>MySQLConnection.server_info, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-info">MySQLConnection.server_info Property</a></dt><dt>MySQLConnection.server_port, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-port">MySQLConnection.server_port Property</a></dt><dt>MySQLConnection.server_version, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-version">MySQLConnection.server_version Property</a></dt><dt>MySQLConnection.sql_mode, <a class="indexterm" href="#connector-python-api-mysqlconnection-sql-mode">MySQLConnection.sql_mode Property</a></dt><dt>MySQLConnection.time_zone, <a class="indexterm" href="#connector-python-api-mysqlconnection-time-zone">MySQLConnection.time_zone Property</a></dt><dt>MySQLConnection.unix_socket, <a class="indexterm" href="#connector-python-api-mysqlconnection-unix-socket">MySQLConnection.unix_socket Property</a></dt><dt>MySQLConnection.unread_results, <a class="indexterm" href="#connector-python-api-mysqlconnection-unread-results">MySQLConnection.unread_results Property</a></dt><dt>MySQLConnection.user, <a class="indexterm" href="#connector-python-api-mysqlconnection-user">MySQLConnection.user Property</a></dt><dt>MySQLConnection.use_unicode, <a class="indexterm" href="#connector-python-api-mysqlconnection-use-unicode">MySQLConnection.use_unicode Property</a></dt><dt>MySQLConnectionPool.pool_name, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-pool-name">MySQLConnectionPool.pool_name Property</a></dt><dt>MySQLCursor.column_names, <a class="indexterm" href="#connector-python-api-mysqlcursor-column-names">MySQLCursor.column_names Property</a></dt><dt>MySQLCursor.description, <a class="indexterm" href="#connector-python-api-mysqlcursor-description">MySQLCursor.description Property</a></dt><dt>MySQLCursor.lastrowid, <a class="indexterm" href="#connector-python-api-mysqlcursor-lastrowid">MySQLCursor.lastrowid Property</a></dt><dt>MySQLCursor.rowcount, <a class="indexterm" href="#connector-python-api-mysqlcursor-rowcount">MySQLCursor.rowcount Property</a></dt><dt>MySQLCursor.statement, <a class="indexterm" href="#connector-python-api-mysqlcursor-statement">MySQLCursor.statement Property</a></dt><dt>MySQLCursor.warnings, <a class="indexterm" href="#connector-python-api-mysqlcursor-warnings">MySQLCursor.warnings Property</a></dt><dt>MySQLCursor.with_rows, <a class="indexterm" href="#connector-python-api-mysqlcursor-with-rows">MySQLCursor.with_rows Property</a></dt><dt>PooledMySQLConnection.pool_name, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-pool-name">PooledMySQLConnection.pool_name Property</a></dt><dt>_mysql_connector.MySQL.have_result_set, <a class="indexterm" href="#connector-python-api-cext-have-result-set">_mysql_connector.MySQL.have_result_set Property</a></dt></dl></dd><dt id="ientry-id1573">Python, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id1567">Python Database API Specification v2.0 (PEP 249), <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_S"></a>S</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id4842">Subclasses cursor.mysqlcursor, <a class="indexterm" href="#connector-python-api-cursor-subclasses">Subclasses cursor.MySQLCursor</a></dt></dl></div></div></div></div><div class="copyright-footer"></div></body></html>
Binary files 9.4.0-1/mysql-connector-python/docs/mysql-connector-python.pdf and 9.5.0-1/mysql-connector-python/docs/mysql-connector-python.pdf differ
diff -pruN 9.4.0-1/mysql-connector-python/docs/mysql-connector-python.txt 9.5.0-1/mysql-connector-python/docs/mysql-connector-python.txt
--- 9.4.0-1/mysql-connector-python/docs/mysql-connector-python.txt	2025-07-10 16:09:39.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/docs/mysql-connector-python.txt	2025-10-15 05:28:33.000000000 +0000
@@ -23,19 +23,19 @@ MySQL Connector/Python Developer Guide
    Licensing information.  This product may include third-party
    software, used under license. If you are using a Commercial
    release of MySQL Connector/Python, see the MySQL
-   Connector/Python 9.3 Commercial License Information User
+   Connector/Python 9.5 Commercial License Information User
    Manual
-   (https://downloads.mysql.com/docs/licenses/connector-python-9.3-com-en.pdf) for licensing information, including licensing
+   (https://downloads.mysql.com/docs/licenses/connector-python-9.5-com-en.pdf) for licensing information, including licensing
    information relating to third-party software that may be
    included in this Commercial release. If you are using a
    Community release of MySQL Connector/Python, see the MySQL
-   Connector/Python 9.3 Community License Information User
+   Connector/Python 9.5 Community License Information User
    Manual
-   (https://downloads.mysql.com/docs/licenses/connector-python-9.3-gpl-en.pdf) for licensing information, including licensing
+   (https://downloads.mysql.com/docs/licenses/connector-python-9.5-gpl-en.pdf) for licensing information, including licensing
    information relating to third-party software that may be
    included in this Community release.
 
-   Document generated on: 2025-07-02 (revision: 82696)
+   Document generated on: 2025-10-13 (revision: 83739)
      ________________________________________________________
 
 Preface and Legal Notices
@@ -425,12 +425,14 @@ Connector/Python Releases
 
    Connector/Python Version MySQL Server Versions Python
    Versions Connector Status
-   9.1.0 and later 8.0 and later 3.13*, 3.12, 3.11, 3.10, 3.9
+   9.5.0 and later 8.0 and later 3.14, 3.13*, 3.12, 3.11, 3.10
+   General Availability
+   9.10 - 9.4.0 8.0 and later 3.13*, 3.12, 3.11, 3.10, 3.9
    General Availability
    8.4.0 and 9.0.0 8.0 and later 3.12, 3.11, 3.10, 3.9, 3.8
    General Availability
-   8.1.0 through 8.3.0 5.7 and later 3.12 (8.2.0+), 3.11, 3.10,
-   3.9, 3.8 General Availability
+   8.1.0 - 8.3.0 5.7 and later 3.12 (8.2.0+), 3.11, 3.10, 3.9,
+   3.8 General Availability
    8.0 8.0, 5.7, 5.6, 5.5 3.11, 3.10, 3.9, 3.8, 3.7, (3.6 before
    8.0.29), (2.7 and 3.5 before 8.0.24) General Availability
    2.2 (continues as 8.0) 5.7, 5.6, 5.5 3.5, 3.4, 2.7 Developer
@@ -467,8 +469,7 @@ Connector/Python Implementations
        depends on the Python Standard Library.
 
        The X DevAPI variant of the connector requires Python
-       Protobuf. The required version is 4.25.3, and was >=
-       4.21.1,<= 4.21.12 before Connector/Python 9.0.0.
+       Protobuf. The required version is 5.29.4.
 
      * As a C Extension that interfaces with the MySQL C client
        library. This implementation of the protocol is dependent
@@ -773,17 +774,10 @@ $ rpm -i mysqlx-connector-python-ver.dis
 
 4.5 Installing Connector/Python from a Source Distribution
 
-   Connector/Python source distributions are platform
-   independent. Source distributions are packaged in two
-   formats:
-
-     * Zip archive format (.zip file)
-
-     * Compressed tar archive format (.tar.gz file)
-
-   Either of the two packaging formats can be used on any
-   platforms, but Zip archives are more commonly used on Windows
-   systems and tar archives on Unix and Unix-like systems.
+   The Connector/Python source distribution is platform
+   independent, and is packaged in the compressed tar archive
+   format (.tar.gz file). See Obtaining Connector/Python) on how
+   to download them.
 
 Prerequisites for Compiling Connector/Python with the C Extension
 
@@ -809,7 +803,7 @@ Prerequisites for Compiling Connector/Py
        (https://dev.mysql.com/downloads/)).
 
      * For installing the X DevAPI interface only: Protobuf C++
-       (version 4.25.3 or later).
+       (version 5.29.4).
 
 Installing Connector/Python from Source Code Using pip
 
@@ -820,123 +814,72 @@ Installing Connector/Python from Source
    the package installation instead of installing packages
    directly into the Python system environment.
 
-   To install Connector/Python from a Zip archive, download its
-   latest version from the Connector/Python download site (see
-   Obtaining Connector/Python) and follow the steps described
-   below.
-
    For installing the classic interface:
 
-    1. Unpack the Zip archive in a directory of your preference.
-
-    2. Start a terminal and change location to the folder where
-       you unpacked the Zip archive. The unpacked folder should
-       have a layout similar to the following:
-
-    mysql-connector-python-x.y.z-src
-    ├── CHANGES.txt
-    ├── CONTRIBUTING.md
-    ├── LICENSE.txt
-    ├── mysql-connector-python
-    │...
-    │├── setup.py
-    │...
-    ├── pyproject.toml
-    ├── README.rst
-    ├── README.txt
-    └── SECURITY.md
-
-    3. Go into the mysql-connector-python-x.y.z-src folder, and
-       perform the installation using this command:
+    1. Download the latest version of the sdist of
+       Connector/Python for the classic MySQL protocol, whose
+       name is in the format of
+       mysql_connector_python-x.y.z.tar.gz.
 
- pip install ./mysql-connector-python
-
-       Warning
-       DO NOT use mysql-connector-python instead of
-       ./mysql-connector-python, as the former will install the
-       WHEEL package from the PyPI repository, and the latter
-       will install the local WHEEL that is compiled from the
-       source code.
-
-       To include the C Extension, use these steps instead to
+    2. Optional: To include the C Extension, use these steps to
        provide the path to the installation directory of MySQL
        Server (or to the folder where the server binaries are
        located) with the MYSQL_CAPI system variable before
        running the installation step. On Linux platforms:
 
  $ export MYSQL_CAPI=<path to server binaries>
- $ pip install ./mysql-connector-python
 
        On Windows platforms:
 
  > $env:MYSQL_CAPI=<path to server binaries>
- > pip install ./mysql-connector-python
 
        Note
        It is not required that the server is actually installed
        on the system; for compiling the C-extension, the
        presence of libraries are sufficient
 
-   For installing X DevAPI:
-
-    1. Unpack the Zip archive in a directory of your preference.
+    3. Perform the installation using this command:
 
-    2. Start a terminal and change location to the folder where
-       you unpacked the Zip archive. The unpacked folder should
-       have a layout similar to the following:
-
-  mysql-connector-python-x.y.z-src
-    ├── CHANGES.txt
-    ├── CONTRIBUTING.md
-    ├── LICENSE.txt
-    ├── mysqlx-connector-python
-    │...
-    │├── setup.py
-    │...
-    ├── pyproject.toml
-    ├── README.rst
-    ├── README.txt
-    └── SECURITY.md
+ pip install ./mysql_connector_python-x.y.z.tar.gz
+       Warning
+       DO NOT use mysql-connector-python instead of
+       ./mysql_connector_python-x.y.z.tar.gz, as the former will
+       install the WHEEL package from the PyPI repository, and
+       the latter will install the local WHEEL that is compiled
+       from the source code.
 
-    3. Go into the mysql-connector-python-x.y.z-src folder, and
-       perform the installation using this commands:
+   For installing X DevAPI:
 
- pip install ./mysqlx-connector-python
-
-       Warning
-       DO NOT use mysqlx-connector-python instead of
-       ./mysqlx-connector-python, as the former will install the
-       WHEEL package from the PyPI repository, and the latter
-       will install the local WHEEL that is compiled from the
-       source code.
-
-       To include the Protobuf C-Extension, use these commands
-       instead on Linux platforms to provide the path to the
-       folder where the protobuf binaries are located by the
-       MYSQLXPB_PROTOBUF system variable before the installation
-       step:
+    1. Download the latest version of the sdist of
+       Connector/Python for the MySQL X Protocol, whose name is
+       in the format of mysqlx_connector_python-x.y.z.tar.gz.
+
+    2. Optional: To include the Protobuf C-Extension, use these
+       commands on Linux platforms to provide the paths to the
+       Protobuf folders by the MYSQLXPB_* system variables
+       before the installation step:
 
  $ export MYSQLXPB_PROTOBUF=<path to protobuf binaries>
  $ export MYSQLXPB_PROTOBUF_INCLUDE_DIR="${MYSQLXPB_PROTOBUF}/include"
  $ export MYSQLXPB_PROTOBUF_LIB_DIR="${MYSQLXPB_PROTOBUF}/lib"
  $ export MYSQLXPB_PROTOC="${MYSQLXPB_PROTOBUF}/bin/protoc"
- $ pip install ./mysqlx-connector-python
 
-       Or these commands on Windows platforms to provide the
-       path to the folder where the protobuf binaries are
-       located by the PROTOBUF system variable before the
-       installation step:
+       Or these commands on Windows platforms:
 
  > $env:PROTOBUF=<path to protobuf binaries>
  > $env:PROTOBUF_INCLUDE_DIR=$env:PROTOBUF+"\include"
  > $env:PROTOBUF_LIB_DIR=$env:PROTOBUF+"\lib"
  > $env:PROTOC=$env:PROTOBUF+"\bin\protoc.exe"
- > pip install ./mysqlx-connector-python
 
-       Note
-       It is not required that the server is actually installed
-       on the system; for compiling the C-extension, the
-       presence of libraries are sufficient
+    3. Perform the installation using this command:
+
+ pip install ./mysqlx_connector_python-x.y.z.tar.gz
+       Warning
+       DO NOT use mysqlx-connector-python instead of
+       ./mysqlx_connector_python-x.y.z.tar.gz, as the former
+       will install the WHEEL package from the PyPI repository,
+       and the latter will install the local WHEEL that is
+       compiled from the source code.
 
 4.6 Verifying Your Connector/Python Installation
 
@@ -2564,7 +2507,7 @@ pip install mysql-connector-python
    Or pass in [telemetry] when installing Connector/Python to
    perform the same actions except it installs a specific and
    tested OpenTelemetry version, which for Connector/Python
-   9.0.0 is OpenTelemetry v1.18.0:
+   9.4.0 and later is OpenTelemetry v1.33.1:
 
 pip install mysql-connector-python[telemetry]
 
diff -pruN 9.4.0-1/mysql-connector-python/examples/__init__.py 9.5.0-1/mysql-connector-python/examples/__init__.py
--- 9.4.0-1/mysql-connector-python/examples/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/examples/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/lib/__init__.py 9.5.0-1/mysql-connector-python/lib/__init__.py
--- 9.4.0-1/mysql-connector-python/lib/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/__init__.py 9.5.0-1/mysql-connector-python/lib/mysql/__init__.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/__init__.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/__init__.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/genai/__init__.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/genai/__init__.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/genai/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/genai/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,43 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""GenAI package for MySQL Connector/Python.
+
+Performs optional dependency checks and exposes public classes:
+- MyEmbeddings
+- MyLLM
+- MyVectorStore
+"""
+from mysql.ai.utils import check_dependencies as _check_dependencies
+
+_check_dependencies(["GENAI"])
+del _check_dependencies
+
+from .embedding import MyEmbeddings
+from .generation import MyLLM
+from .vector_store import MyVectorStore
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/genai/embedding.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/genai/embedding.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/genai/embedding.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/genai/embedding.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,197 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""Embeddings integration utilities for MySQL Connector/Python.
+
+Provides MyEmbeddings class to generate embeddings via MySQL HeatWave
+using ML_EMBED_TABLE and ML_EMBED_ROW.
+"""
+
+from typing import Dict, List, Optional
+
+import pandas as pd
+
+from langchain_core.embeddings import Embeddings
+from pydantic import PrivateAttr
+
+from mysql.ai.utils import (
+    atomic_transaction,
+    execute_sql,
+    format_value_sql,
+    source_schema,
+    sql_table_from_df,
+    sql_table_to_df,
+    temporary_sql_tables,
+)
+from mysql.connector.abstracts import MySQLConnectionAbstract
+
+
+class MyEmbeddings(Embeddings):
+    """
+    Embedding generator class that uses a MySQL database to compute embeddings for input text.
+
+    This class batches input text into temporary SQL tables, invokes MySQL's ML_EMBED_TABLE
+    to generate embeddings, and retrieves the results as lists of floats.
+
+    Attributes:
+        _db_connection (MySQLConnectionAbstract): MySQL connection used for all database operations.
+        schema_name (str): Name of the database schema to use.
+        options_placeholder (str): SQL-ready placeholder string for ML_EMBED_TABLE options.
+        options_params (dict): Dictionary of concrete option values to be passed as SQL parameters.
+    """
+
+    _db_connection: MySQLConnectionAbstract = PrivateAttr()
+
+    def __init__(
+        self, db_connection: MySQLConnectionAbstract, options: Optional[Dict] = None
+    ):
+        """
+        Initialize MyEmbeddings with a database connection and optional embedding parameters.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwgenai-ml-embed-row.html
+                A full list of supported options can be found under "options"
+
+        NOTE: The supported "options" are the intersection of the options provided in
+            https://dev.mysql.com/doc/heatwave/en/mys-hwgenai-ml-embed-row.html
+            https://dev.mysql.com/doc/heatwave/en/mys-hwgenai-ml-embed-table.html
+
+        Args:
+            db_connection: Active MySQL connector database connection.
+            options: Optional dictionary of options for embedding operations.
+
+        Raises:
+            ValueError: If the schema name is not valid
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        super().__init__()
+        self._db_connection = db_connection
+        self.schema_name = source_schema(db_connection)
+        options = options or {}
+        self.options_placeholder, self.options_params = format_value_sql(options)
+
+    def embed_documents(self, texts: List[str]) -> List[List[float]]:
+        """
+        Generate embeddings for a list of input texts using the MySQL ML embedding procedure.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwgenai-ml-embed-table.html
+
+        Args:
+            texts: List of input strings to embed.
+
+        Returns:
+            List of lists of floats, with each inner list containing the embedding for a text.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported.
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+            ValueError:
+                If one or more text entries were unable to be embedded.
+
+        Implementation notes:
+            - Creates a temporary table to pass input text to the MySQL embedding service.
+            - Adds a primary key to ensure results preserve input order.
+            - Calls ML_EMBED_TABLE and fetches the resulting embeddings.
+            - Deletes the temporary table after use to avoid polluting the database.
+            - Embedding vectors are extracted from the "embeddings" column of the result table.
+        """
+        if not texts:
+            return []
+
+        df = pd.DataFrame({"id": range(len(texts)), "text": texts})
+
+        with (
+            atomic_transaction(self._db_connection) as cursor,
+            temporary_sql_tables(self._db_connection) as temporary_tables,
+        ):
+            qualified_table_name, table_name = sql_table_from_df(
+                cursor, self.schema_name, df
+            )
+            temporary_tables.append((self.schema_name, table_name))
+
+            # ML_EMBED_TABLE expects input/output columns and options as parameters
+            embed_query = (
+                "CALL sys.ML_EMBED_TABLE("
+                f"'{qualified_table_name}.text', "
+                f"'{qualified_table_name}.embeddings', "
+                f"{self.options_placeholder}"
+                ")"
+            )
+            execute_sql(cursor, embed_query, params=self.options_params)
+
+            # Read back all columns, including "embeddings"
+            df_embeddings = sql_table_to_df(cursor, self.schema_name, table_name)
+
+            if df_embeddings["embeddings"].isnull().any() or any(
+                e is None for e in df_embeddings["embeddings"]
+            ):
+                raise ValueError(
+                    "Failure to generate embeddings for one or more text entry."
+                )
+
+            # Convert fetched embeddings to lists of floats
+            embeddings = df_embeddings["embeddings"].tolist()
+            embeddings = [list(e) for e in embeddings]
+
+            return embeddings
+
+    def embed_query(self, text: str) -> List[float]:
+        """
+        Generate an embedding for a single text string.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwgenai-ml-embed-row.html
+
+        Args:
+            text: The input string to embed.
+
+        Returns:
+            List of floats representing the embedding vector.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported.
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Example:
+            >>> MyEmbeddings(db_conn).embed_query("Hello world")
+            [0.1, 0.2, ...]
+        """
+        with atomic_transaction(self._db_connection) as cursor:
+            execute_sql(
+                cursor,
+                f'SELECT sys.ML_EMBED_ROW("%s", {self.options_placeholder})',
+                params=(text, *self.options_params),
+            )
+            return list(cursor.fetchone()[0])
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/genai/generation.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/genai/generation.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/genai/generation.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/genai/generation.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,162 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""GenAI LLM integration utilities for MySQL Connector/Python.
+
+Provides MyLLM wrapper that issues ML_GENERATE calls via SQL.
+"""
+
+import json
+
+from typing import Any, List, Optional
+
+try:
+    from langchain_core.language_models.llms import LLM
+except ImportError:
+    from langchain.llms.base import LLM
+from pydantic import PrivateAttr
+
+from mysql.ai.utils import atomic_transaction, execute_sql, format_value_sql
+from mysql.connector.abstracts import MySQLConnectionAbstract
+
+
+class MyLLM(LLM):
+    """
+    Custom Large Language Model (LLM) interface for MySQL HeatWave.
+
+    This class wraps the generation functionality provided by HeatWave LLMs,
+    exposing an interface compatible with common LLM APIs for text generation.
+    It provides full support for generative queries and limited support for
+    agentic queries.
+
+    Attributes:
+        _db_connection (MySQLConnectionAbstract):
+            Underlying MySQL connector database connection.
+    """
+
+    _db_connection: MySQLConnectionAbstract = PrivateAttr()
+
+    class Config:
+        """
+        Pydantic config for the model.
+
+        By default, LangChain (through Pydantic BaseModel) does not allow
+        setting or storing undeclared attributes such as _db_connection.
+        Setting extra = "allow" makes it possible to store extra attributes
+        on the class instance, which is required for MyLLM.
+        """
+
+        extra = "allow"
+
+    def __init__(self, db_connection: MySQLConnectionAbstract):
+        """
+        Initialize the MyLLM instance with an active MySQL database connection.
+
+        Args:
+            db_connection: A MySQL connection object used to run LLM queries.
+
+        Notes:
+            The db_connection is stored as a private attribute via object.__setattr__,
+            which is compatible with Pydantic models.
+        """
+        super().__init__()
+
+        self._db_connection = db_connection
+
+    def _call(
+        self,
+        prompt: str,
+        stop: Optional[List[str]] = None,
+        **kwargs: Any,
+    ) -> str:
+        """
+        Generate a text completion from the LLM for a given input prompt.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwgenai-ml-generate.html
+                A full list of supported options (specified by kwargs) can be found under "options"
+
+        Args:
+            prompt: The input prompt string for the language model.
+            stop: Optional list of stop strings to support agentic and chain-of-thought
+                  reasoning workflows.
+            **kwargs: Additional keyword arguments providing generation options to
+                      the LLM (these are serialized to JSON and passed to the HeatWave syscall).
+
+        Returns:
+            The generated model output as a string.
+            (The actual completion does NOT include the input prompt.)
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported.
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Implementation Notes:
+            - Serializes kwargs into a SQL-compatible JSON string.
+            - Calls the LLM stored procedure using a database cursor context.
+            - Uses `sys.ML_GENERATE` on the server to produce the model output.
+            - Expects the server response to be a JSON object with a 'text' key.
+        """
+        options = kwargs.copy()
+        if stop is not None:
+            options["stop_sequences"] = stop
+
+        options_placeholder, options_params = format_value_sql(options)
+        with atomic_transaction(self._db_connection) as cursor:
+            # The prompt is passed as a parameterized argument (avoids SQL injection).
+            generate_query = f"""SELECT sys.ML_GENERATE("%s", {options_placeholder});"""
+            execute_sql(cursor, generate_query, params=(prompt, *options_params))
+            # Expect a JSON-encoded result from MySQL; parse to extract the output.
+            llm_response = json.loads(cursor.fetchone()[0])["text"]
+
+        return llm_response
+
+    @property
+    def _identifying_params(self) -> dict:
+        """
+        Return a dictionary of params that uniquely identify this LLM instance.
+
+        Returns:
+            dict: Dictionary of identifier parameters (should include
+                model_name for tracing/caching).
+        """
+        return {
+            "model_name": "mysql_heatwave_llm",
+        }
+
+    @property
+    def _llm_type(self) -> str:
+        """
+        Get the type name of this LLM implementation.
+
+        Returns:
+            A string identifying the LLM provider (used for logging or metrics).
+        """
+        return "mysql_heatwave_llm"
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/genai/vector_store.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/genai/vector_store.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/genai/vector_store.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/genai/vector_store.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,520 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""MySQL-backed vector store for embeddings and semantic document retrieval.
+
+Provides a VectorStore implementation persisting documents, metadata, and
+embeddings in MySQL, plus similarity search utilities.
+"""
+
+import json
+
+from typing import Any, Iterable, List, Optional, Sequence, Union
+
+import pandas as pd
+
+from langchain_core.documents import Document
+from langchain_core.embeddings import Embeddings
+from langchain_core.vectorstores import VectorStore
+from pydantic import PrivateAttr
+
+from mysql.ai.genai.embedding import MyEmbeddings
+from mysql.ai.utils import (
+    VAR_NAME_SPACE,
+    atomic_transaction,
+    delete_sql_table,
+    execute_sql,
+    extend_sql_table,
+    format_value_sql,
+    get_random_name,
+    is_table_empty,
+    source_schema,
+    table_exists,
+)
+from mysql.connector.abstracts import MySQLConnectionAbstract
+
+BASIC_EMBEDDING_QUERY = "Hello world!"
+EMBEDDING_SOURCE = "external_source"
+
+VAR_EMBEDDING = f"{VAR_NAME_SPACE}.embedding"
+VAR_CONTEXT = f"{VAR_NAME_SPACE}.context"
+VAR_CONTEXT_MAP = f"{VAR_NAME_SPACE}.context_map"
+VAR_RETRIEVAL_INFO = f"{VAR_NAME_SPACE}.retrieval_info"
+VAR_OPTIONS = f"{VAR_NAME_SPACE}.options"
+
+ID_SPACE = "internal_ai_id_"
+
+
+class MyVectorStore(VectorStore):
+    """
+    MySQL-backed vector store for handling embeddings and semantic document retrieval.
+
+    Supports adding, deleting, and searching high-dimensional vector representations
+    of documents using efficient storage and HeatWave ML similarity search procedures.
+
+    Supports use as a context manager: when used in a `with` statement, all backing
+    tables/data are deleted automatically when the block exits (even on exception).
+
+    Attributes:
+        db_connection (MySQLConnectionAbstract): Active MySQL database connection.
+        embedder (Embeddings): Embeddings generator for computing vector representations.
+        schema_name (str): SQL schema for table storage.
+        table_name (Optional[str]): Name of the active table backing the store
+            (or None until created).
+        embedding_dimension (int): Size of embedding vectors stored.
+        next_id (int): Internal counter for unique document ID generation.
+    """
+
+    _db_connection: MySQLConnectionAbstract = PrivateAttr()
+    _embedder: Embeddings = PrivateAttr()
+    _schema_name: str = PrivateAttr()
+    _table_name: Optional[str] = PrivateAttr()
+    _embedding_dimension: int = PrivateAttr()
+    _next_id: int = PrivateAttr()
+
+    def __init__(
+        self,
+        db_connection: MySQLConnectionAbstract,
+        embedder: Optional[Embeddings] = None,
+    ) -> None:
+        """
+        Initialize a MyVectorStore with a database connection and embedding generator.
+
+        Args:
+            db_connection: MySQL database connection for all vector operations.
+            embedder: Embeddings generator used for creating and querying embeddings.
+
+        Raises:
+            ValueError: If the schema name is not valid
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        super().__init__()
+        self._next_id = 0
+
+        self._schema_name = source_schema(db_connection)
+        self._embedder = embedder or MyEmbeddings(db_connection)
+        self._db_connection = db_connection
+        self._table_name: Optional[str] = None
+
+        # Embedding dimension determined using an example call.
+        # Assumes embeddings have fixed length.
+        self._embedding_dimension = len(
+            self._embedder.embed_query(BASIC_EMBEDDING_QUERY)
+        )
+
+    def _get_ids(self, num_ids: int) -> list[str]:
+        """
+        Generate a batch of unique internal document IDs for vector storage.
+
+        Args:
+            num_ids: Number of IDs to create.
+
+        Returns:
+            List of sequentially numbered internal string IDs.
+        """
+        ids = [
+            f"internal_ai_id_{i}" for i in range(self._next_id, self._next_id + num_ids)
+        ]
+        self._next_id += num_ids
+        return ids
+
+    def _make_vector_store(self) -> None:
+        """
+        Create a backing SQL table for storing vectors if not already created.
+
+        Returns:
+            None
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            The table name is randomized to avoid collisions.
+            Schema includes content, metadata, and embedding vector.
+        """
+        if self._table_name is None:
+            with atomic_transaction(self._db_connection) as cursor:
+                table_name = get_random_name(
+                    lambda table_name: not table_exists(
+                        cursor, self._schema_name, table_name
+                    )
+                )
+
+                create_table_stmt = f"""
+                CREATE TABLE {self._schema_name}.{table_name} (
+                    `id` VARCHAR(128) NOT NULL,
+                    `content` TEXT,
+                    `metadata` JSON DEFAULT NULL,
+                    `embed` vector(%s),
+                    PRIMARY KEY (`id`)
+                ) ENGINE=InnoDB;
+                """
+                execute_sql(
+                    cursor, create_table_stmt, params=(self._embedding_dimension,)
+                )
+
+                self._table_name = table_name
+
+    def delete(self, ids: Optional[Sequence[str]] = None, **_: Any) -> None:
+        """
+        Delete documents by ID. Optionally deletes the vector table if empty after deletions.
+
+        Args:
+            ids: Optional sequence of document IDs to delete. If None, no action is taken.
+
+        Returns:
+            None
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            If the backing table is empty after deletions, the table is dropped and
+            table_name is set to None.
+        """
+        with atomic_transaction(self._db_connection) as cursor:
+            if ids:
+                for _id in ids:
+                    execute_sql(
+                        cursor,
+                        f"DELETE FROM {self._schema_name}.{self._table_name} WHERE id = %s",
+                        params=(_id,),
+                    )
+
+            if is_table_empty(cursor, self._schema_name, self._table_name):
+                self.delete_all()
+
+    def delete_all(self) -> None:
+        """
+        Delete and drop the entire vector store table.
+
+        Returns:
+            None
+        """
+        if self._table_name is not None:
+            with atomic_transaction(self._db_connection) as cursor:
+                delete_sql_table(cursor, self._schema_name, self._table_name)
+                self._table_name = None
+
+    def add_texts(
+        self,
+        texts: Iterable[str],
+        metadatas: Optional[list[dict]] = None,
+        ids: Optional[List[str]] = None,
+        **_: dict,
+    ) -> List[str]:
+        """
+        Add a batch of text strings and corresponding metadata to the vector store.
+
+        Args:
+            texts: List of strings to embed and store.
+            metadatas: Optional list of metadata dicts (one per text).
+            ids: Optional custom document IDs.
+
+        Returns:
+            List of document IDs corresponding to the added texts.
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            If metadatas is None, an empty dict is assigned to each document.
+        """
+        texts = list(texts)
+
+        documents = [
+            Document(page_content=text, metadata=meta)
+            for text, meta in zip(texts, metadatas or [{}] * len(texts))
+        ]
+        return self.add_documents(documents, ids=ids)
+
+    @classmethod
+    def from_texts(
+        cls,
+        texts: Iterable[str],
+        embedder: Embeddings,
+        metadatas: Optional[list[dict]] = None,
+        db_connection: MySQLConnectionAbstract = None,
+    ) -> VectorStore:
+        """
+        Construct and populate a MyVectorStore instance from raw texts and metadata.
+
+        Args:
+            texts: List of strings to vectorize and store.
+            embedder: Embeddings generator to use.
+            metadatas: Optional list of metadata dicts per text.
+            db_connection: Active MySQL connection.
+
+        Returns:
+            Instance of MyVectorStore containing the added texts.
+
+        Raises:
+            ValueError: If db_connection is not provided.
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        if db_connection is None:
+            raise ValueError(
+                "db_connection must be specified to create a MyVectorStore object"
+            )
+
+        texts = list(texts)
+
+        instance = cls(db_connection=db_connection, embedder=embedder)
+        instance.add_texts(texts, metadatas=metadatas)
+
+        return instance
+
+    def add_documents(
+        self, documents: list[Document], ids: list[str] = None
+    ) -> list[str]:
+        """
+        Embed and store Document objects as high-dimensional vectors with metadata.
+
+        Args:
+            documents: List of Document objects (each with 'page_content' and 'metadata').
+            ids: Optional list of explicit document IDs. Must match the length of documents.
+
+        Returns:
+            List of document IDs stored.
+
+        Raises:
+            ValueError: If provided IDs do not match the number of documents.
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            Automatically creates the backing table if it does not exist.
+        """
+        if ids and len(ids) != len(documents):
+            msg = (
+                "ids must be the same length as documents. "
+                f"Got {len(ids)} ids and {len(documents)} documents."
+            )
+            raise ValueError(msg)
+
+        if len(documents) > 0:
+            self._make_vector_store()
+        else:
+            return []
+
+        if ids is None:
+            ids = self._get_ids(len(documents))
+
+        content = [doc.page_content for doc in documents]
+        vectors = self._embedder.embed_documents(content)
+
+        df = pd.DataFrame()
+        df["id"] = ids
+        df["content"] = content
+        df["embed"] = vectors
+        df["metadata"] = [doc.metadata for doc in documents]
+
+        with atomic_transaction(self._db_connection) as cursor:
+            extend_sql_table(
+                cursor,
+                self._schema_name,
+                self._table_name,
+                df,
+                col_name_to_placeholder_string={"embed": "string_to_vector(%s)"},
+            )
+
+        return ids
+
+    def similarity_search(
+        self,
+        query: str,
+        k: int = 3,
+        **kwargs: Any,
+    ) -> list[Document]:
+        """
+        Search for and return the most similar documents in the store to the given query.
+
+        Args:
+            query: String query to embed and use for similarity search.
+            k: Number of top documents to return.
+            kwargs: options to pass to ML_SIMILARITY_SEARCH. Currently supports
+                distance_metric, max_distance, percentage_distance, and segment_overlap
+
+        Returns:
+            List of Document objects, ordered from most to least similar.
+
+        Raises:
+            DatabaseError:
+                If provided kwargs are invalid or unsupported.
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Implementation Notes:
+            - Calls ML similarity search within MySQL using stored procedures.
+            - Retrieves IDs, content, and metadata for search matches.
+            - Parsing and retrieval for context results are handled via intermediate JSONs.
+        """
+        if self._table_name is None:
+            return []
+
+        embedding = self._embedder.embed_query(query)
+
+        with atomic_transaction(self._db_connection) as cursor:
+            # Set the embedding variable for the similarity search SP
+            execute_sql(
+                cursor,
+                f"SET @{VAR_EMBEDDING} = string_to_vector(%s)",
+                params=[str(embedding)],
+            )
+
+            distance_metric = kwargs.get("distance_metric", "COSINE")
+            retrieval_options = {
+                "max_distance": kwargs.get("max_distance", 0.6),
+                "percentage_distance": kwargs.get("percentage_distance", 20.0),
+                "segment_overlap": kwargs.get("segment_overlap", 0),
+            }
+
+            retrieval_options_placeholder, retrieval_options_params = format_value_sql(
+                retrieval_options
+            )
+            similarity_search_query = f"""
+            CALL sys.ML_SIMILARITY_SEARCH(
+                @{VAR_EMBEDDING},
+                JSON_ARRAY(
+                    '{self._schema_name}.{self._table_name}'
+                ),
+                JSON_OBJECT(
+                    "segment", "content",
+                    "segment_embedding", "embed",
+                    "document_name", "id"
+                ),
+                {k},
+                %s,
+                NULL,
+                NULL,
+                {retrieval_options_placeholder},
+                @{VAR_CONTEXT},
+                @{VAR_CONTEXT_MAP},
+                @{VAR_RETRIEVAL_INFO}
+            )
+            """
+
+            execute_sql(
+                cursor,
+                similarity_search_query,
+                params=[distance_metric, *retrieval_options_params],
+            )
+            execute_sql(cursor, f"SELECT @{VAR_CONTEXT_MAP}")
+
+            results = []
+
+            context_maps = json.loads(cursor.fetchone()[0])
+            for context in context_maps:
+                execute_sql(
+                    cursor,
+                    (
+                        "SELECT id, content, metadata "
+                        f"FROM {self._schema_name}.{self._table_name} "
+                        "WHERE id = %s"
+                    ),
+                    params=(context["document_name"],),
+                )
+                doc_id, content, metadata = cursor.fetchone()
+
+                doc_args = {
+                    "id": doc_id,
+                    "page_content": content,
+                }
+                if metadata is not None:
+                    doc_args["metadata"] = json.loads(metadata)
+
+                doc = Document(**doc_args)
+                results.append(doc)
+
+            return results
+
+    def __enter__(self) -> "VectorStore":
+        """
+        Enter the runtime context related to this vector store instance.
+
+        Returns:
+            The current MyVectorStore object, allowing use within a `with` statement block.
+
+        Usage Notes:
+            - Intended for use in a `with` statement to ensure automatic
+              cleanup of resources.
+            - No special initialization occurs during context entry, but enables
+              proper context-managed lifecycle.
+
+        Example:
+            with MyVectorStore(db_connection, embedder) as vectorstore:
+                vectorstore.add_texts([...])
+                # Vector store is active within this block.
+            # All storage and resources are now cleaned up.
+        """
+        return self
+
+    def __exit__(
+        self,
+        exc_type: Union[type, None],
+        exc_val: Union[BaseException, None],
+        exc_tb: Union[object, None],
+    ) -> None:
+        """
+        Exit the runtime context for the vector store, ensuring all storage
+        resources are cleaned up.
+
+        Args:
+            exc_type: The exception type, if any exception occurred in the context block.
+            exc_val: The exception value, if any exception occurred in the context block.
+            exc_tb:  The traceback object, if any exception occurred in the context block.
+
+        Returns:
+            None: Indicates that exceptions are never suppressed; they will propagate as normal.
+
+        Implementation Notes:
+            - Automatically deletes all vector store data and backing tables via `delete_all()`
+            upon exiting the context.
+            - This cleanup occurs whether the block exits normally or due to an exception.
+            - Does not suppress exceptions; errors in the context block will continue to propagate.
+            - Use when the vector store lifecycle is intended to be temporary or scoped.
+
+        Example:
+            with MyVectorStore(db_connection, embedder) as vectorstore:
+                vectorstore.add_texts([...])
+                # Vector store is active within this block.
+            # All storage and resources are now cleaned up.
+        """
+        self.delete_all()
+        # No return, so exceptions are never suppressed
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/__init__.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/__init__.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,48 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""ML package for MySQL Connector/Python.
+
+Performs optional dependency checks and exposes ML utilities:
+- ML_TASK, MyModel
+- MyClassifier, MyRegressor, MyGenericTransformer
+- MyAnomalyDetector
+"""
+from mysql.ai.utils import check_dependencies as _check_dependencies
+
+_check_dependencies(["ML"])
+del _check_dependencies
+
+# Sklearn models
+from .classifier import MyClassifier
+
+# Minimal interface
+from .model import ML_TASK, MyModel
+from .outlier import MyAnomalyDetector
+from .regressor import MyRegressor
+from .transformer import MyGenericTransformer
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/base.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/base.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/base.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/base.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,142 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""Base classes for MySQL HeatWave ML estimators for Connector/Python.
+
+Implements a scikit-learn-compatible base estimator wrapping server-side ML.
+"""
+from typing import Optional, Union
+
+import pandas as pd
+
+from sklearn.base import BaseEstimator
+
+from mysql.connector.abstracts import MySQLConnectionAbstract
+from mysql.ai.ml.model import ML_TASK, MyModel
+from mysql.ai.utils import copy_dict
+
+
+class MyBaseMLModel(BaseEstimator):
+    """
+    Base class for MySQL HeatWave machine learning estimators.
+
+    Implements the scikit-learn API and core model management logic,
+    including fit, explain, serialization, and dynamic option handling.
+    For use as a base class by classifiers, regressors, transformers, and outlier models.
+
+    Args:
+        db_connection (MySQLConnectionAbstract): An active MySQL connector database connection.
+        task (str): ML task type, e.g. "classification" or "regression".
+        model_name (str, optional): Custom name for the deployed model.
+        fit_extra_options (dict, optional): Extra options for fitting.
+
+    Attributes:
+        _model: Underlying database helper for fit/predict/explain.
+        fit_extra_options: User-provided options for fitting.
+    """
+
+    def __init__(
+        self,
+        db_connection: MySQLConnectionAbstract,
+        task: Union[str, ML_TASK],
+        model_name: Optional[str] = None,
+        fit_extra_options: Optional[dict] = None,
+    ):
+        """
+        Initialize a MyBaseMLModel with connection, task, and option parameters.
+
+        Args:
+            db_connection: Active MySQL connector database connection.
+            task: String label of ML task (e.g. "classification").
+            model_name: Optional custom model name.
+            fit_extra_options: Optional extra fit options.
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        self._model = MyModel(db_connection, task=task, model_name=model_name)
+        self.fit_extra_options = copy_dict(fit_extra_options)
+
+    def fit(
+        self,
+        X: pd.DataFrame,  # pylint: disable=invalid-name
+        y: Optional[pd.DataFrame] = None,
+    ) -> "MyBaseMLModel":
+        """
+        Fit the underlying ML model using pandas DataFrames.
+        Delegates to MyMLModelPandasHelper.fit.
+
+        Args:
+            X: Features DataFrame.
+            y: (Optional) Target labels DataFrame or Series.
+
+        Returns:
+            self
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported.
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            Additional temp SQL resources may be created and cleaned up during the operation.
+        """
+        self._model.fit(X, y, self.fit_extra_options)
+        return self
+
+    def _delete_model(self) -> bool:
+        """
+        Deletes the model from the model catalog if present
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Returns:
+            Whether the model was deleted
+        """
+        return self._model._delete_model()
+
+    def get_model_info(self) -> Optional[dict]:
+        """
+        Checks if the model name is available. Model info will only be present in the
+        catalog if the model has previously been fitted.
+
+        Returns:
+            True if the model name is not part of the model catalog
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        return self._model.get_model_info()
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/classifier.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/classifier.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/classifier.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/classifier.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,194 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""Classifier utilities for MySQL Connector/Python.
+
+Provides a scikit-learn compatible classifier backed by HeatWave ML.
+"""
+from typing import Optional, Union
+
+import numpy as np
+import pandas as pd
+from sklearn.base import ClassifierMixin
+
+from mysql.ai.ml.base import MyBaseMLModel
+from mysql.ai.ml.model import ML_TASK
+from mysql.ai.utils import copy_dict
+
+from mysql.connector.abstracts import MySQLConnectionAbstract
+
+
+class MyClassifier(MyBaseMLModel, ClassifierMixin):
+    """
+    MySQL HeatWave scikit-learn compatible classifier estimator.
+
+    Provides prediction and probability output from a model deployed in MySQL,
+    and manages fit, explain, and prediction options as per HeatWave ML interface.
+
+    Attributes:
+        predict_extra_options (dict): Dictionary of optional parameters passed through
+            to the MySQL backend for prediction and probability inference.
+        _model (MyModel): Underlying interface for database model operations.
+        fit_extra_options (dict): See MyBaseMLModel.
+
+    Args:
+        db_connection (MySQLConnectionAbstract): Active MySQL connector DB connection.
+        model_name (str, optional): Custom name for the model.
+        fit_extra_options (dict, optional): Extra options for fitting.
+        explain_extra_options (dict, optional): Extra options for explanations.
+        predict_extra_options (dict, optional): Extra options for predict/predict_proba.
+
+    Methods:
+        predict(X): Predict class labels.
+        predict_proba(X): Predict class probabilities.
+    """
+
+    def __init__(
+        self,
+        db_connection: MySQLConnectionAbstract,
+        model_name: Optional[str] = None,
+        fit_extra_options: Optional[dict] = None,
+        explain_extra_options: Optional[dict] = None,
+        predict_extra_options: Optional[dict] = None,
+    ):
+        """
+        Initialize a MyClassifier.
+
+        Args:
+            db_connection: Active MySQL connector database connection.
+            model_name: Optional, custom model name.
+            fit_extra_options: Optional fit options.
+            explain_extra_options: Optional explain options.
+            predict_extra_options: Optional predict/predict_proba options.
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        MyBaseMLModel.__init__(
+            self,
+            db_connection,
+            ML_TASK.CLASSIFICATION,
+            model_name=model_name,
+            fit_extra_options=fit_extra_options,
+        )
+        self.predict_extra_options = copy_dict(predict_extra_options)
+        self.explain_extra_options = copy_dict(explain_extra_options)
+
+    def predict(
+        self, X: Union[pd.DataFrame, np.ndarray]
+    ) -> np.ndarray:  # pylint: disable=invalid-name
+        """
+        Predict class labels for the input features using the MySQL model.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-predict-table.html
+                A full list of supported options can be found under "ML_PREDICT_TABLE Options"
+
+        Args:
+            X: Input samples as a numpy array or pandas DataFrame.
+
+        Returns:
+            ndarray: Array of predicted class labels, shape (n_samples,).
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        result = self._model.predict(X, options=self.predict_extra_options)
+        return result["Prediction"].to_numpy()
+
+    def predict_proba(
+        self, X: Union[pd.DataFrame, np.ndarray]
+    ) -> np.ndarray:  # pylint: disable=invalid-name
+        """
+        Predict class probabilities for the input features using the MySQL model.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-predict-table.html
+                A full list of supported options can be found under "ML_PREDICT_TABLE Options"
+
+        Args:
+            X: Input samples as a numpy array or pandas DataFrame.
+
+        Returns:
+            ndarray: Array of shape (n_samples, n_classes) with class probabilities.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        result = self._model.predict(X, options=self.predict_extra_options)
+
+        classes = sorted(result["ml_results"].iloc[0]["probabilities"].keys())
+
+        return np.stack(
+            result["ml_results"].map(
+                lambda ml_result: [
+                    ml_result["probabilities"][class_name] for class_name in classes
+                ]
+            )
+        )
+
+    def explain_predictions(
+        self, X: Union[pd.DataFrame, np.ndarray]
+    ) -> pd.DataFrame:  # pylint: disable=invalid-name
+        """
+        Explain model predictions using provided data.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-explain-table.html
+                A full list of supported options can be found under "ML_EXPLAIN_TABLE Options"
+
+        Args:
+            X: DataFrame for which predictions should be explained.
+
+        Returns:
+            DataFrame containing explanation details (feature attributions, etc.)
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            Temporary input/output tables are cleaned up after explanation.
+        """
+        self._model.explain_predictions(X, options=self.explain_extra_options)
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/model.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/model.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/model.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/model.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,780 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+"""HeatWave ML model utilities for MySQL Connector/Python.
+
+Provides classes to manage training, prediction, scoring, and explanations
+via MySQL HeatWave stored procedures.
+"""
+import copy
+import json
+
+from enum import Enum
+from typing import Any, Dict, Optional, Union
+
+import numpy as np
+import pandas as pd
+
+from mysql.ai.utils import (
+    VAR_NAME_SPACE,
+    atomic_transaction,
+    convert_to_df,
+    execute_sql,
+    format_value_sql,
+    get_random_name,
+    source_schema,
+    sql_response_to_df,
+    sql_table_from_df,
+    sql_table_to_df,
+    table_exists,
+    temporary_sql_tables,
+    validate_name,
+)
+from mysql.connector.abstracts import MySQLConnectionAbstract
+
+
+class ML_TASK(Enum):  # pylint: disable=invalid-name
+    """Enumeration of supported ML tasks for HeatWave."""
+
+    CLASSIFICATION = "classification"
+    REGRESSION = "regression"
+    FORECASTING = "forecasting"
+    ANOMALY_DETECTION = "anomaly_detection"
+    LOG_ANOMALY_DETECTION = "log_anomaly_detection"
+    RECOMMENDATION = "recommendation"
+    TOPIC_MODELING = "topic_modeling"
+
+    @staticmethod
+    def get_task_string(task: Union[str, "ML_TASK"]) -> str:
+        """
+        Return the string representation of a machine learning task.
+
+        Args:
+            task (Union[str, ML_TASK]): The task to convert.
+                Accepts either a task enum member (ML_TASK) or a string.
+
+        Returns:
+            str: The string value of the ML task.
+        """
+
+        if isinstance(task, str):
+            return task
+
+        return task.value
+
+
+class _MyModelCommon:
+    """
+    Common utilities and workflow for MySQL HeatWave ML models.
+
+    This class handles model lifecycle steps such as loading, fitting, scoring,
+    making predictions, and explaining models or predictions. Not intended for
+    direct instantiation, but as a superclass for heatwave model wrappers.
+
+    Attributes:
+        db_connection: MySQL connector database connection.
+        task: ML task, e.g., "classification" or "regression".
+        model_name: Identifier of model in MySQL.
+        schema_name: Database schema used for operations and temp tables.
+    """
+
+    def __init__(
+        self,
+        db_connection: MySQLConnectionAbstract,
+        task: Union[str, ML_TASK] = ML_TASK.CLASSIFICATION,
+        model_name: Optional[str] = None,
+    ):
+        """
+        Instantiate _MyMLModelCommon.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-train.html
+                A full list of supported tasks can be found under "Common ML_TRAIN Options"
+
+        Args:
+            db_connection: MySQL database connection.
+            task: ML task type (default: "classification").
+            model_name: Name to register the model within MySQL (default: None).
+
+        Raises:
+            ValueError: If the schema name is not valid
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Returns:
+            None
+        """
+        self.db_connection = db_connection
+        self.task = ML_TASK.get_task_string(task)
+        self.schema_name = source_schema(db_connection)
+
+        with atomic_transaction(self.db_connection) as cursor:
+            execute_sql(cursor, "CALL sys.ML_CREATE_OR_UPGRADE_CATALOG();")
+
+        if model_name is None:
+            model_name = get_random_name(self._is_model_name_available)
+
+        self.model_var = f"{VAR_NAME_SPACE}.{model_name}"
+        self.model_var_score = f"{self.model_var}.score"
+
+        self.model_name = model_name
+        validate_name(model_name)
+
+        with atomic_transaction(self.db_connection) as cursor:
+            execute_sql(cursor, f"SET @{self.model_var} = %s;", params=(model_name,))
+
+    def _delete_model(self) -> bool:
+        """
+        Deletes the model from the model catalog if present
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Returns:
+            Whether the model was deleted
+        """
+        current_user = self._get_user()
+
+        qualified_model_catalog = f"ML_SCHEMA_{current_user}.MODEL_CATALOG"
+        delete_model = (
+            f"DELETE FROM {qualified_model_catalog} "
+            f"WHERE model_handle = @{self.model_var}"
+        )
+
+        with atomic_transaction(self.db_connection) as cursor:
+            execute_sql(cursor, delete_model)
+            return cursor.rowcount > 0
+
+    def _get_model_info(self, model_name: str) -> Optional[dict]:
+        """
+        Retrieves the model info from the model_catalog
+
+        Args:
+            model_var: The model alias to retrieve
+
+        Returns:
+            The model info from the model_catalog (None if the model is not present in the catalog)
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+
+        def process_col(elem: Any) -> Any:
+            if isinstance(elem, str):
+                try:
+                    elem = json.loads(elem)
+                except json.JSONDecodeError:
+                    pass
+            return elem
+
+        current_user = self._get_user()
+
+        qualified_model_catalog = f"ML_SCHEMA_{current_user}.MODEL_CATALOG"
+        model_exists = (
+            f"SELECT * FROM {qualified_model_catalog} WHERE model_handle = %s"
+        )
+
+        with atomic_transaction(self.db_connection) as cursor:
+            execute_sql(cursor, model_exists, params=(model_name,))
+            model_info_df = sql_response_to_df(cursor)
+
+            if model_info_df.empty:
+                result = None
+            else:
+                unprocessed_result = model_info_df.to_json(orient="records")
+                unprocessed_result_json = json.loads(unprocessed_result)[0]
+                result = {
+                    key: process_col(elem)
+                    for key, elem in unprocessed_result_json.items()
+                }
+
+            return result
+
+    def get_model_info(self) -> Optional[dict]:
+        """
+        Checks if the model name is available.
+        Model info is present in the catalog only if the model was previously fitted.
+
+        Returns:
+            True if the model name is not part of the model catalog
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        return self._get_model_info(self.model_name)
+
+    def _is_model_name_available(self, model_name: str) -> bool:
+        """
+        Checks if the model name is available
+
+        Returns:
+            True if the model name is not part of the model catalog
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        return self._get_model_info(model_name) is None
+
+    def _load_model(self) -> None:
+        """
+        Loads the model specified by `self.model_name` into MySQL.
+        After loading, the model is ready to handle ML operations.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-model-load.html
+
+        Raises:
+            DatabaseError:
+                If the model is not initialized, i.e., fit or import has not been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Returns:
+            None
+        """
+        with atomic_transaction(self.db_connection) as cursor:
+            load_model_query = f"CALL sys.ML_MODEL_LOAD(@{self.model_var}, NULL);"
+            execute_sql(cursor, load_model_query)
+
+    def _get_user(self) -> str:
+        """
+        Fetch the current database user (without host).
+
+        Returns:
+            The username string associated with the connection.
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+            ValueError: If the user name includes unsupported characters
+        """
+        with atomic_transaction(self.db_connection) as cursor:
+            cursor.execute("SELECT CURRENT_USER()")
+            current_user = cursor.fetchone()[0].split("@")[0]
+
+            return validate_name(current_user)
+
+    def explain_model(self) -> dict:
+        """
+        Get model explanations, such as detailed feature importances.
+
+        Returns:
+            dict: Feature importances and model explainability data.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-model-explanations.html
+
+        Raises:
+            DatabaseError:
+                If the model is not initialized, i.e., fit or import has not been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+            ValueError:
+                If the model does not exist in the model catalog.
+                Should only occur if model was not fitted or was deleted.
+        """
+        self._load_model()
+        with atomic_transaction(self.db_connection) as cursor:
+            current_user = self._get_user()
+
+            qualified_model_catalog = f"ML_SCHEMA_{current_user}.MODEL_CATALOG"
+            explain_query = (
+                f"SELECT model_explanation FROM {qualified_model_catalog} "
+                f"WHERE model_handle = @{self.model_var}"
+            )
+
+            execute_sql(cursor, explain_query)
+            df = sql_response_to_df(cursor)
+
+            return df.iloc[0, 0]
+
+    def _fit(
+        self,
+        table_name: str,
+        target_column_name: Optional[str],
+        options: Optional[dict],
+    ) -> None:
+        """
+        Fit an ML model using a referenced SQL table and target column.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-train.html
+                A full list of supported options can be found under "Common ML_TRAIN Options"
+
+        Args:
+            table_name: Name of the training data table.
+            target_column_name: Name of the target/label column.
+            options: Additional fit/config options (may override defaults).
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported.
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+            ValueError: If the table or target_column name is not valid
+
+        Returns:
+            None
+        """
+        validate_name(table_name)
+        if target_column_name is not None:
+            validate_name(target_column_name)
+            target_col_string = f"'{target_column_name}'"
+        else:
+            target_col_string = "NULL"
+
+        if options is None:
+            options = {}
+        options = copy.deepcopy(options)
+        options["task"] = self.task
+
+        self._delete_model()
+
+        with atomic_transaction(self.db_connection) as cursor:
+            placeholders, parameters = format_value_sql(options)
+            execute_sql(
+                cursor,
+                (
+                    "CALL sys.ML_TRAIN("
+                    f"'{self.schema_name}.{table_name}', "
+                    f"{target_col_string}, "
+                    f"{placeholders}, "
+                    f"@{self.model_var}"
+                    ")"
+                ),
+                params=parameters,
+            )
+
+    def _predict(
+        self, table_name: str, output_table_name: str, options: Optional[dict]
+    ) -> None:
+        """
+        Predict on a given data table and write results to an output table.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-predict-table.html
+                A full list of supported options can be found under "ML_PREDICT_TABLE Options"
+
+        Args:
+            table_name: Name of the SQL table with input data.
+            output_table_name: Name for the SQL output table to contain predictions.
+            options: Optional prediction options.
+
+        Returns:
+            None
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+            ValueError: If the table or output_table name is not valid
+        """
+        validate_name(table_name)
+        validate_name(output_table_name)
+
+        self._load_model()
+        with atomic_transaction(self.db_connection) as cursor:
+            placeholders, parameters = format_value_sql(options)
+            execute_sql(
+                cursor,
+                (
+                    "CALL sys.ML_PREDICT_TABLE("
+                    f"'{self.schema_name}.{table_name}', "
+                    f"@{self.model_var}, "
+                    f"'{self.schema_name}.{output_table_name}', "
+                    f"{placeholders}"
+                    ")"
+                ),
+                params=parameters,
+            )
+
+    def _score(
+        self,
+        table_name: str,
+        target_column_name: str,
+        metric: str,
+        options: Optional[dict],
+    ) -> float:
+        """
+        Evaluate model performance with a scoring metric.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-score.html
+                A full list of supported options can be found under
+                "Options for Recommendation Models" and
+                "Options for Anomaly Detection Models"
+
+        Args:
+            table_name: Table with features and ground truth.
+            target_column_name: Column of true target labels.
+            metric: String name of the metric to compute.
+            options: Optional dictionary of further scoring options.
+
+        Returns:
+            float: Computed score from the ML system.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+            ValueError: If the table or target_column name or metric is not valid
+        """
+        validate_name(table_name)
+        validate_name(target_column_name)
+        validate_name(metric)
+
+        self._load_model()
+        with atomic_transaction(self.db_connection) as cursor:
+            placeholders, parameters = format_value_sql(options)
+            execute_sql(
+                cursor,
+                (
+                    "CALL sys.ML_SCORE("
+                    f"'{self.schema_name}.{table_name}', "
+                    f"'{target_column_name}', "
+                    f"@{self.model_var}, "
+                    "%s, "
+                    f"@{self.model_var_score}, "
+                    f"{placeholders}"
+                    ")"
+                ),
+                params=[metric, *parameters],
+            )
+            execute_sql(cursor, f"SELECT @{self.model_var_score}")
+            df = sql_response_to_df(cursor)
+
+            return df.iloc[0, 0]
+
+    def _explain_predictions(
+        self, table_name: str, output_table_name: str, options: Optional[dict]
+    ) -> pd.DataFrame:
+        """
+        Produce explanations for model predictions on provided data.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-explain-table.html
+                A full list of supported options can be found under "ML_EXPLAIN_TABLE Options"
+
+        Args:
+            table_name: Name of the SQL table with input data.
+            output_table_name: Name for the SQL table to store explanations.
+            options: Optional dictionary (default:
+                {"prediction_explainer": "permutation_importance"}).
+
+        Returns:
+            DataFrame: Prediction explanations from the output SQL table.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+            ValueError: If the table or output_table name is not valid
+        """
+        validate_name(table_name)
+        validate_name(output_table_name)
+
+        if options is None:
+            options = {"prediction_explainer": "permutation_importance"}
+
+        self._load_model()
+
+        with atomic_transaction(self.db_connection) as cursor:
+            placeholders, parameters = format_value_sql(options)
+            execute_sql(
+                cursor,
+                (
+                    "CALL sys.ML_EXPLAIN_TABLE("
+                    f"'{self.schema_name}.{table_name}', "
+                    f"@{self.model_var}, "
+                    f"'{self.schema_name}.{output_table_name}', "
+                    f"{placeholders}"
+                    ")"
+                ),
+                params=parameters,
+            )
+            execute_sql(cursor, f"SELECT * FROM {self.schema_name}.{output_table_name}")
+            df = sql_response_to_df(cursor)
+
+            return df
+
+
+class MyModel(_MyModelCommon):
+    """
+    Convenience class for managing the ML workflow using pandas DataFrames.
+
+    Methods convert in-memory DataFrames into temp SQL tables before delegating to the
+    _MyMLModelCommon routines, and automatically clean up temp resources.
+    """
+
+    def fit(
+        self,
+        X: Union[pd.DataFrame, np.ndarray],  # pylint: disable=invalid-name
+        y: Optional[Union[pd.DataFrame, np.ndarray]],
+        options: Optional[dict] = None,
+    ) -> None:
+        """
+        Fit a model using DataFrame inputs.
+
+        If an 'id' column is defined in either dataframe, it will be used as the primary key.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-train.html
+                A full list of supported options can be found under "Common ML_TRAIN Options"
+
+        Args:
+            X: Features DataFrame.
+            y: (Optional) Target labels DataFrame or Series. If None, only X is used.
+            options: Additional options to pass to training.
+
+        Returns:
+            None
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported.
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            Combines X and y as necessary. Creates a temporary table in the schema for training,
+            and deletes it afterward.
+        """
+        X, y = convert_to_df(X), convert_to_df(y)
+
+        with (
+            atomic_transaction(self.db_connection) as cursor,
+            temporary_sql_tables(self.db_connection) as temporary_tables,
+        ):
+            if y is not None:
+                if isinstance(y, pd.DataFrame):
+                    # keep column name if it exists
+                    target_column_name = y.columns[0]
+                else:
+                    target_column_name = get_random_name(
+                        lambda name: name not in X.columns
+                    )
+
+                if target_column_name in X.columns:
+                    raise ValueError(
+                        f"Target column y with name {target_column_name} already present "
+                        "in feature dataframe X"
+                    )
+
+                df_combined = X.copy()
+                df_combined[target_column_name] = y
+                final_df = df_combined
+            else:
+                target_column_name = None
+                final_df = X
+
+            _, table_name = sql_table_from_df(cursor, self.schema_name, final_df)
+            temporary_tables.append((self.schema_name, table_name))
+
+            self._fit(table_name, target_column_name, options)
+
+    def predict(
+        self,
+        X: Union[pd.DataFrame, np.ndarray],  # pylint: disable=invalid-name
+        options: Optional[dict] = None,
+    ) -> pd.DataFrame:
+        """
+        Generate model predictions using DataFrame input.
+
+        If an 'id' column is defined in either dataframe, it will be used as the primary key.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-predict-table.html
+                A full list of supported options can be found under "ML_PREDICT_TABLE Options"
+
+        Args:
+            X: DataFrame containing prediction features (no labels).
+            options: Additional prediction settings.
+
+        Returns:
+            DataFrame with prediction results as returned by HeatWave.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            Temporary SQL tables are created and deleted for input/output.
+        """
+        X = convert_to_df(X)
+
+        with (
+            atomic_transaction(self.db_connection) as cursor,
+            temporary_sql_tables(self.db_connection) as temporary_tables,
+        ):
+            _, table_name = sql_table_from_df(cursor, self.schema_name, X)
+            temporary_tables.append((self.schema_name, table_name))
+
+            output_table_name = get_random_name(
+                lambda table_name: not table_exists(
+                    cursor, self.schema_name, table_name
+                )
+            )
+            temporary_tables.append((self.schema_name, output_table_name))
+
+            self._predict(table_name, output_table_name, options)
+            predictions = sql_table_to_df(cursor, self.schema_name, output_table_name)
+
+            # ml_results is text but known to always follow JSON format
+            predictions["ml_results"] = predictions["ml_results"].map(json.loads)
+
+            return predictions
+
+    def score(
+        self,
+        X: Union[pd.DataFrame, np.ndarray],  # pylint: disable=invalid-name
+        y: Union[pd.DataFrame, np.ndarray],
+        metric: str,
+        options: Optional[dict] = None,
+    ) -> float:
+        """
+        Score the model using X/y data and a selected metric.
+
+        If an 'id' column is defined in either dataframe, it will be used as the primary key.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-score.html
+                A full list of supported options can be found under
+                "Options for Recommendation Models" and
+                "Options for Anomaly Detection Models"
+
+        Args:
+            X: DataFrame of features.
+            y: DataFrame or Series of labels.
+            metric: Metric name (e.g., "balanced_accuracy").
+            options: Optional ml scoring options.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Returns:
+            float: Computed score.
+        """
+        X, y = convert_to_df(X), convert_to_df(y)
+
+        with (
+            atomic_transaction(self.db_connection) as cursor,
+            temporary_sql_tables(self.db_connection) as temporary_tables,
+        ):
+            target_column_name = get_random_name(lambda name: name not in X.columns)
+            df_combined = X.copy()
+            df_combined[target_column_name] = y
+            final_df = df_combined
+
+            _, table_name = sql_table_from_df(cursor, self.schema_name, final_df)
+            temporary_tables.append((self.schema_name, table_name))
+
+            score = self._score(table_name, target_column_name, metric, options)
+
+            return score
+
+    def explain_predictions(
+        self,
+        X: Union[pd.DataFrame, np.ndarray],  # pylint: disable=invalid-name
+        options: Dict = None,
+    ) -> pd.DataFrame:
+        """
+        Explain model predictions using provided data.
+
+        If an 'id' column is defined in either dataframe, it will be used as the primary key.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-explain-table.html
+                A full list of supported options can be found under
+                "ML_EXPLAIN_TABLE Options"
+
+        Args:
+            X: DataFrame for which predictions should be explained.
+            options: Optional dictionary of explainability options.
+
+        Returns:
+            DataFrame containing explanation details (feature attributions, etc.)
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported, or if the model is not initialized,
+                i.e., fit or import has not been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            Temporary input/output tables are cleaned up after explanation.
+        """
+        X = convert_to_df(X)
+
+        with (
+            atomic_transaction(self.db_connection) as cursor,
+            temporary_sql_tables(self.db_connection) as temporary_tables,
+        ):
+
+            _, table_name = sql_table_from_df(cursor, self.schema_name, X)
+            temporary_tables.append((self.schema_name, table_name))
+
+            output_table_name = get_random_name(
+                lambda table_name: not table_exists(
+                    cursor, self.schema_name, table_name
+                )
+            )
+            temporary_tables.append((self.schema_name, output_table_name))
+
+            explanations = self._explain_predictions(
+                table_name, output_table_name, options
+            )
+
+            return explanations
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/outlier.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/outlier.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/outlier.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/outlier.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,221 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""Outlier/anomaly detection utilities for MySQL Connector/Python.
+
+Provides a scikit-learn compatible wrapper using HeatWave to score anomalies.
+"""
+from typing import Optional, Union
+
+import numpy as np
+import pandas as pd
+from sklearn.base import OutlierMixin
+
+from mysql.ai.ml.base import MyBaseMLModel
+from mysql.ai.ml.model import ML_TASK
+from mysql.ai.utils import copy_dict
+
+from mysql.connector.abstracts import MySQLConnectionAbstract
+
+EPS = 1e-5
+
+
+def _get_logits(prob: Union[float, np.ndarray]) -> Union[float, np.ndarray]:
+    """
+    Compute logit (logodds) for a probability, clipping to avoid numerical overflow.
+
+    Args:
+        prob: Scalar or array of probability values in (0,1).
+
+    Returns:
+        logit-transformed probabilities.
+    """
+    result = np.clip(prob, EPS, 1 - EPS)
+    return np.log(result / (1 - result))
+
+
+class MyAnomalyDetector(MyBaseMLModel, OutlierMixin):
+    """
+    MySQL HeatWave scikit-learn compatible anomaly/outlier detector.
+
+    Flags samples as outliers when the probability of being an anomaly
+    exceeds a user-tunable threshold.
+    Includes helpers to obtain decision scores and anomaly probabilities
+    for ranking.
+
+    Args:
+        db_connection (MySQLConnectionAbstract): Active MySQL DB connection.
+        model_name (str, optional): Custom model name in the database.
+        fit_extra_options (dict, optional): Extra options for fitting.
+        score_extra_options (dict, optional): Extra options for scoring/prediction.
+
+    Attributes:
+        boundary: Decision threshold boundary in logit space. Derived from
+            trained model's catalog info
+
+    Methods:
+        predict(X): Predict outlier/inlier labels.
+        score_samples(X): Compute anomaly (normal class) logit scores.
+        decision_function(X): Compute signed score above/below threshold for ranking.
+    """
+
+    def __init__(
+        self,
+        db_connection: MySQLConnectionAbstract,
+        model_name: Optional[str] = None,
+        fit_extra_options: Optional[dict] = None,
+        score_extra_options: Optional[dict] = None,
+    ):
+        """
+        Initialize an anomaly detector instance with threshold and extra options.
+
+        Args:
+            db_connection: Active MySQL DB connection.
+            model_name: Optional model name in DB.
+            fit_extra_options: Optional extra fit options.
+            score_extra_options: Optional extra scoring options.
+
+        Raises:
+            ValueError: If outlier_threshold is not in (0,1).
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        MyBaseMLModel.__init__(
+            self,
+            db_connection,
+            ML_TASK.ANOMALY_DETECTION,
+            model_name=model_name,
+            fit_extra_options=fit_extra_options,
+        )
+        self.score_extra_options = copy_dict(score_extra_options)
+        self.boundary: Optional[float] = None
+
+    def predict(
+        self,
+        X: Union[pd.DataFrame, np.ndarray],  # pylint: disable=invalid-name
+    ) -> np.ndarray:
+        """
+        Predict outlier/inlier binary labels for input samples.
+
+        Args:
+            X: Samples to predict on.
+
+        Returns:
+            ndarray: Values are -1 for outliers, +1 for inliers, as per scikit-learn convention.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        return np.where(self.decision_function(X) < 0.0, -1, 1)
+
+    def decision_function(
+        self,
+        X: Union[pd.DataFrame, np.ndarray],  # pylint: disable=invalid-name
+    ) -> np.ndarray:
+        """
+        Compute signed distance to the outlier threshold.
+
+        Args:
+            X: Samples to predict on.
+
+        Returns:
+            ndarray: Score > 0 means inlier, < 0 means outlier; |value| gives margin.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+            ValueError:
+                If the provided model info does not provide threshold
+        """
+        sample_scores = self.score_samples(X)
+
+        if self.boundary is None:
+            model_info = self.get_model_info()
+            if model_info is None:
+                raise ValueError("Model does not exist in catalog.")
+
+            threshold = model_info["model_metadata"]["training_params"].get(
+                "anomaly_detection_threshold", None
+            )
+            if threshold is None:
+                raise ValueError(
+                    "Trained model is outdated and does not support threshold. "
+                    "Try retraining or using an existing, trained model with MyModel."
+                )
+
+            # scikit-learn uses large positive values as inlier
+            # and negative as outlier, so we need to flip our threshold
+            self.boundary = _get_logits(1.0 - threshold)
+
+        return sample_scores - self.boundary
+
+    def score_samples(
+        self,
+        X: Union[pd.DataFrame, np.ndarray],  # pylint: disable=invalid-name
+    ) -> np.ndarray:
+        """
+        Compute normal probability logit score for each sample.
+        Used for ranking, thresholding.
+
+        Args:
+            X: Samples to score.
+
+        Returns:
+            ndarray: Logit scores based on "normal" class probability.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        result = self._model.predict(X, options=self.score_extra_options)
+
+        return _get_logits(
+            result["ml_results"]
+            .apply(lambda x: x["probabilities"]["normal"])
+            .to_numpy()
+        )
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/regressor.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/regressor.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/regressor.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/regressor.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,154 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""Regressor utilities for MySQL Connector/Python.
+
+Provides a scikit-learn compatible regressor backed by HeatWave ML.
+"""
+from typing import Optional, Union
+
+import numpy as np
+import pandas as pd
+from sklearn.base import RegressorMixin
+
+from mysql.ai.ml.base import MyBaseMLModel
+from mysql.ai.ml.model import ML_TASK
+from mysql.ai.utils import copy_dict
+
+from mysql.connector.abstracts import MySQLConnectionAbstract
+
+
+class MyRegressor(MyBaseMLModel, RegressorMixin):
+    """
+    MySQL HeatWave scikit-learn compatible regressor estimator.
+
+    Provides prediction output from a regression model deployed in MySQL,
+    and manages fit, explain, and prediction options as per HeatWave ML interface.
+
+    Attributes:
+        predict_extra_options (dict): Optional parameter dict passed to the backend for prediction.
+        _model (MyModel): Underlying interface for database model operations.
+        fit_extra_options (dict): See MyBaseMLModel.
+        explain_extra_options (dict): See MyBaseMLModel.
+
+    Args:
+        db_connection (MySQLConnectionAbstract): Active MySQL connector DB connection.
+        model_name (str, optional): Custom name for the model.
+        fit_extra_options (dict, optional): Extra options for fitting.
+        explain_extra_options (dict, optional): Extra options for explanations.
+        predict_extra_options (dict, optional): Extra options for predictions.
+
+    Methods:
+        predict(X): Predict regression target.
+    """
+
+    def __init__(
+        self,
+        db_connection: MySQLConnectionAbstract,
+        model_name: Optional[str] = None,
+        fit_extra_options: Optional[dict] = None,
+        explain_extra_options: Optional[dict] = None,
+        predict_extra_options: Optional[dict] = None,
+    ):
+        """
+        Initialize a MyRegressor.
+
+        Args:
+            db_connection: Active MySQL connector database connection.
+            model_name: Optional, custom model name.
+            fit_extra_options: Optional fit options.
+            explain_extra_options: Optional explain options.
+            predict_extra_options: Optional prediction options.
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        MyBaseMLModel.__init__(
+            self,
+            db_connection,
+            ML_TASK.REGRESSION,
+            model_name=model_name,
+            fit_extra_options=fit_extra_options,
+        )
+
+        self.predict_extra_options = copy_dict(predict_extra_options)
+        self.explain_extra_options = copy_dict(explain_extra_options)
+
+    def predict(
+        self, X: Union[pd.DataFrame, np.ndarray]
+    ) -> np.ndarray:  # pylint: disable=invalid-name
+        """
+        Predict a continuous target for the input features using the MySQL model.
+
+        Args:
+            X: Input samples as a numpy array or pandas DataFrame.
+
+        Returns:
+            ndarray: Array of predicted target values, shape (n_samples,).
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        result = self._model.predict(X, options=self.predict_extra_options)
+        return result["Prediction"].to_numpy()
+
+    def explain_predictions(
+        self, X: Union[pd.DataFrame, np.ndarray]
+    ) -> pd.DataFrame:  # pylint: disable=invalid-name
+        """
+        Explain model predictions using provided data.
+
+        References:
+            https://dev.mysql.com/doc/heatwave/en/mys-hwaml-ml-explain-table.html
+                A full list of supported options can be found under "ML_EXPLAIN_TABLE Options"
+
+        Args:
+            X: DataFrame for which predictions should be explained.
+
+        Returns:
+            DataFrame containing explanation details (feature attributions, etc.)
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+
+        Notes:
+            Temporary input/output tables are cleaned up after explanation.
+        """
+        self._model.explain_predictions(X, options=self.explain_extra_options)
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/transformer.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/transformer.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/ml/transformer.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/ml/transformer.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,164 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+"""Generic transformer utilities for MySQL Connector/Python.
+
+Provides a scikit-learn compatible Transformer using HeatWave for fit/transform
+and scoring operations.
+"""
+from typing import Optional, Union
+
+import numpy as np
+import pandas as pd
+from sklearn.base import TransformerMixin
+
+from mysql.ai.ml.base import MyBaseMLModel
+from mysql.ai.ml.model import ML_TASK
+from mysql.ai.utils import copy_dict
+from mysql.connector.abstracts import MySQLConnectionAbstract
+
+
+class MyGenericTransformer(MyBaseMLModel, TransformerMixin):
+    """
+    MySQL HeatWave scikit-learn compatible generic transformer.
+
+    Can be used as the transformation step in an sklearn pipeline. Implements fit, transform,
+    explain, and scoring capability, passing options for server-side transform logic.
+
+    Args:
+        db_connection (MySQLConnectionAbstract): Active MySQL connector database connection.
+        task (str): ML task type for transformer (default: "classification").
+        score_metric (str): Scoring metric to request from backend (default: "balanced_accuracy").
+        model_name (str, optional): Custom name for the deployed model.
+        fit_extra_options (dict, optional): Extra fit options.
+        transform_extra_options (dict, optional): Extra options for transformations.
+        score_extra_options (dict, optional): Extra options for scoring.
+
+    Attributes:
+        score_metric (str): Name of the backend metric to use for scoring
+            (e.g. "balanced_accuracy").
+        score_extra_options (dict): Dictionary of optional scoring parameters;
+            passed to backend score.
+        transform_extra_options (dict): Dictionary of inference (/predict)
+            parameters for the backend.
+        fit_extra_options (dict): See MyBaseMLModel.
+        _model (MyModel): Underlying interface for database model operations.
+
+    Methods:
+        fit(X, y): Fit the underlying model using the provided features/targets.
+        transform(X): Transform features using the backend model.
+        score(X, y): Score data using backend metric and options.
+    """
+
+    def __init__(
+        self,
+        db_connection: MySQLConnectionAbstract,
+        task: Union[str, ML_TASK] = ML_TASK.CLASSIFICATION,
+        score_metric: str = "balanced_accuracy",
+        model_name: Optional[str] = None,
+        fit_extra_options: Optional[dict] = None,
+        transform_extra_options: Optional[dict] = None,
+        score_extra_options: Optional[dict] = None,
+    ):
+        """
+        Initialize transformer with required and optional arguments.
+
+        Args:
+            db_connection: Active MySQL backend database connection.
+            task: ML task type for transformer.
+            score_metric: Requested backend scoring metric.
+            model_name: Optional model name for storage.
+            fit_extra_options: Optional extra options for fitting.
+            transform_extra_options: Optional extra options for transformation/inference.
+            score_extra_options: Optional extra scoring options.
+
+        Raises:
+            DatabaseError:
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        MyBaseMLModel.__init__(
+            self,
+            db_connection,
+            task,
+            model_name=model_name,
+            fit_extra_options=fit_extra_options,
+        )
+
+        self.score_metric = score_metric
+        self.score_extra_options = copy_dict(score_extra_options)
+
+        self.transform_extra_options = copy_dict(transform_extra_options)
+
+    def transform(
+        self, X: pd.DataFrame
+    ) -> pd.DataFrame:  # pylint: disable=invalid-name
+        """
+        Transform input data to model predictions using the underlying helper.
+
+        Args:
+            X: DataFrame of features to predict/transform.
+
+        Returns:
+            pd.DataFrame: Results of transformation as returned by backend.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        return self._model.predict(X, options=self.transform_extra_options)
+
+    def score(
+        self,
+        X: Union[pd.DataFrame, np.ndarray],  # pylint: disable=invalid-name
+        y: Union[pd.DataFrame, np.ndarray],
+    ) -> float:
+        """
+        Score the transformed data using the backend scoring interface.
+
+        Args:
+            X: Transformed features.
+            y: Target labels or data for scoring.
+
+        Returns:
+            float: Score based on backend metric.
+
+        Raises:
+            DatabaseError:
+                If provided options are invalid or unsupported,
+                or if the model is not initialized, i.e., fit or import has not
+                been called
+                If a database connection issue occurs.
+                If an operational error occurs during execution.
+        """
+        return self._model.score(
+            X, y, self.score_metric, options=self.score_extra_options
+        )
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/utils/__init__.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/utils/__init__.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/utils/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/utils/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,44 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""Utilities for AI-related helpers in MySQL Connector/Python.
+
+This package exposes:
+- check_dependencies(): runtime dependency guard for optional AI features
+- atomic_transaction(): context manager ensuring atomic DB transactions
+- utils: general-purpose helpers used by AI integrations
+
+Importing this package validates base dependencies required for AI utilities.
+"""
+
+from .dependencies import check_dependencies
+
+check_dependencies(["BASE"])
+
+from .atomic_cursor import atomic_transaction
+from .utils import *
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/utils/atomic_cursor.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/utils/atomic_cursor.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/utils/atomic_cursor.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/utils/atomic_cursor.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,94 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""Atomic transaction context manager utilities for MySQL Connector/Python.
+
+Provides context manager atomic_transaction() that ensures commit on success
+and rollback on error without obscuring the original exception.
+"""
+
+from contextlib import contextmanager
+from typing import Iterator
+
+from mysql.connector.abstracts import MySQLConnectionAbstract
+from mysql.connector.cursor import MySQLCursorAbstract
+
+
+@contextmanager
+def atomic_transaction(
+    conn: MySQLConnectionAbstract,
+) -> Iterator[MySQLCursorAbstract]:
+    """
+    Context manager that wraps a MySQL database cursor and ensures transaction
+    rollback in case of exception.
+
+    NOTE: DDL statements such as CREATE TABLE cause implicit commits. These cannot
+    be managed by a cursor object. Changes made at or before a DDL statement will
+    be committed and not rolled back. Callers are responsible for any cleanup of
+    this type.
+
+    This class acts as a robust, PEP 343-compliant context manager for handling
+    database cursor operations on a MySQL connection. It ensures that all operations
+    executed within the context block are part of the same transaction, and
+    automatically calls `connection.rollback()` if an exception occurs, helping
+    to maintain database integrity. On normal completion (no exception), it simply
+    closes the cursor after use. Exceptions are always propagated to the caller.
+
+    Args:
+        conn: A MySQLConnectionAbstract instance.
+    """
+    old_autocommit = conn.autocommit
+    cursor = conn.cursor()
+
+    exception_raised = False
+    try:
+        if old_autocommit:
+            conn.autocommit = False
+
+        yield cursor  # provide cursor to block
+
+        conn.commit()
+    except Exception:  # pylint: disable=broad-exception-caught
+        exception_raised = True
+        try:
+            conn.rollback()
+        except Exception:  # pylint: disable=broad-exception-caught
+            # Don't obscure original exception
+            pass
+
+        # Raise original exception
+        raise
+    finally:
+        conn.autocommit = old_autocommit
+
+        try:
+            cursor.close()
+        except Exception:  # pylint: disable=broad-exception-caught
+            # don't obscure original exception if exists
+            if not exception_raised:
+                raise
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/utils/dependencies.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/utils/dependencies.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/utils/dependencies.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/utils/dependencies.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,88 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+"""Dependency checking utilities for AI features in MySQL Connector/Python.
+
+Provides check_dependencies() to assert required optional packages are present
+with acceptable minimum versions at runtime.
+"""
+
+import importlib.metadata
+
+from typing import List
+
+
+def check_dependencies(tasks: List[str]) -> None:
+    """
+    Check required runtime dependencies and minimum versions; raise an error
+    if any are missing or version-incompatible.
+
+    This verifies the presence and minimum version of essential Python packages.
+    Missing or insufficient versions cause an ImportError listing the packages
+    and a suggested install command.
+
+    Args:
+        tasks (List[str]): Task types to check requirements for.
+
+    Raises:
+        ImportError: If any required dependencies are missing or below the
+            minimum version.
+    """
+    task_set = set(tasks)
+    task_set.add("BASE")
+
+    # Requirements: (import_name, min_version)
+    task_to_requirement = {
+        "BASE": [("pandas", "1.5.0")],
+        "GENAI": [
+            ("langchain", "0.1.11"),
+            ("langchain_core", "0.1.11"),
+            ("pydantic", "1.10.0"),
+        ],
+        "ML": [("scikit-learn", "1.3.0")],
+    }
+    requirements = []
+    for task in task_set:
+        requirements.extend(task_to_requirement[task])
+    requirements_set = set(requirements)
+
+    problems = []
+    for name, min_version in requirements_set:
+        try:
+            installed_version = importlib.metadata.version(name)
+            # Version comparison uses simple string comparison to avoid extra
+            # dependencies. This is valid for the dependencies defined above;
+            # reconsider if adding packages with version schemes that do not
+            # compare correctly as strings.
+            error = installed_version < min_version
+        except importlib.metadata.PackageNotFoundError:
+            error = True
+        if error:
+            problems.append(f"{name} v{min_version} (or later)")
+    if problems:
+        raise ImportError("Please install " + ", ".join(problems) + ".")
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/ai/utils/utils.py 9.5.0-1/mysql-connector-python/lib/mysql/ai/utils/utils.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/ai/utils/utils.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/ai/utils/utils.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,573 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+"""General utilities for AI features in MySQL Connector/Python.
+
+Includes helpers for:
+- defensive dict copying
+- temporary table lifecycle management
+- SQL execution and result conversions
+- DataFrame to/from SQL table utilities
+- schema/table/column name validation
+- array-like to DataFrame conversion
+"""
+
+import copy
+import json
+import random
+import re
+import string
+
+from contextlib import contextmanager
+from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Union
+
+import numpy as np
+import pandas as pd
+
+from mysql.ai.utils.atomic_cursor import atomic_transaction
+
+from mysql.connector.abstracts import MySQLConnectionAbstract
+from mysql.connector.cursor import MySQLCursorAbstract
+from mysql.connector.types import ParamsSequenceOrDictType
+
+VAR_NAME_SPACE = "mysql_ai"
+RANDOM_TABLE_NAME_LENGTH = 32
+
+PD_TO_SQL_DTYPE_MAPPING = {
+    "int64": "BIGINT",
+    "float64": "DOUBLE",
+    "object": "LONGTEXT",
+    "bool": "BOOLEAN",
+    "datetime64[ns]": "DATETIME",
+}
+
+DEFAULT_SCHEMA = "mysql_ai"
+
+# Misc Utilities
+
+
+def copy_dict(options: Optional[dict]) -> dict:
+    """
+    Make a defensive copy of a dictionary, or return an empty dict if None.
+
+    Args:
+        options: param dict or None
+
+    Returns:
+        dict
+    """
+    if options is None:
+        return {}
+
+    return copy.deepcopy(options)
+
+
+@contextmanager
+def temporary_sql_tables(
+    db_connection: MySQLConnectionAbstract,
+) -> Iterator[list[tuple[str, str]]]:
+    """
+    Context manager to track and automatically clean up temporary SQL tables.
+
+    Args:
+        db_connection: Database connection object used to create and delete tables.
+
+    Returns:
+        None
+
+    Raises:
+        DatabaseError:
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+
+    Yields:
+        temporary_tables: List of (schema_name, table_name) tuples created during the
+            context. All tables in this list are deleted on context exit.
+    """
+    temporary_tables: List[Tuple[str, str]] = []
+    try:
+        yield temporary_tables
+    finally:
+        with atomic_transaction(db_connection) as cursor:
+            for schema_name, table_name in temporary_tables:
+                delete_sql_table(cursor, schema_name, table_name)
+
+
+def execute_sql(
+    cursor: MySQLCursorAbstract, query: str, params: ParamsSequenceOrDictType = None
+) -> None:
+    """
+    Execute an SQL query with optional parameters using the given cursor.
+
+    Args:
+        cursor: MySQLCursorAbstract object to execute the query.
+        query: SQL query string to execute.
+        params: Optional sequence or dict providing parameters for the query.
+
+    Raises:
+        DatabaseError:
+            If the provided SQL query/params are invalid
+            If the query is valid but the sql raises as an exception
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+
+    Returns:
+        None
+    """
+    cursor.execute(query, params or ())
+
+
+def _get_name() -> str:
+    """
+    Generate a random uppercase string of fixed length for table names.
+
+    Returns:
+        Random string of length RANDOM_TABLE_NAME_LENGTH.
+    """
+    char_set = string.ascii_uppercase
+    return "".join(random.choices(char_set, k=RANDOM_TABLE_NAME_LENGTH))
+
+
+def get_random_name(condition: Callable[[str], bool], max_calls: int = 100) -> str:
+    """
+    Generate a random string name that satisfies a given condition.
+
+    Args:
+        condition: Callable that takes a generated name and returns True if it is valid.
+        max_calls: Maximum number of attempts before giving up (default 100).
+
+    Returns:
+        A random string that fulfills the provided condition.
+
+    Raises:
+        RuntimeError: If the maximum number of attempts is reached without success.
+    """
+    for _ in range(max_calls):
+        if condition(name := _get_name()):
+            return name
+    # condition never met
+    raise RuntimeError("Reached max tries without successfully finding a unique name")
+
+
+# Format conversions
+
+
+def format_value_sql(value: Any) -> Tuple[str, List[Any]]:
+    """
+    Convert a Python value into its SQL-compatible string representation and parameters.
+
+    Args:
+        value: The value to format.
+
+    Returns:
+        Tuple containing:
+            - A string for substitution into a SQL query.
+            - A list of parameters to be bound into the query.
+    """
+    if isinstance(value, (dict, list)):
+        if len(value) == 0:
+            return "%s", [None]
+        return "CAST(%s as JSON)", [json.dumps(value)]
+    return "%s", [value]
+
+
+def sql_response_to_df(cursor: MySQLCursorAbstract) -> pd.DataFrame:
+    """
+    Convert the results of a cursor's last executed query to a pandas DataFrame.
+
+    Args:
+        cursor: MySQLCursorAbstract with a completed query.
+
+    Returns:
+        DataFrame with data from the cursor.
+
+    Raises:
+        DatabaseError:
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+            If a compatible SELECT query wasn't the last statement ran
+    """
+
+    def _json_processor(elem: Optional[str]) -> Optional[dict]:
+        return json.loads(elem) if elem is not None else None
+
+    def _default_processor(elem: Any) -> Any:
+        return elem
+
+    idx_to_processor = {}
+    for idx, col in enumerate(cursor.description):
+        if col[1] == 245:
+            # 245 is the MySQL type code for JSON
+            idx_to_processor[idx] = _json_processor
+        else:
+            idx_to_processor[idx] = _default_processor
+
+    rows = cursor.fetchall()
+
+    # Process results
+    processed_rows = []
+    for row in rows:
+        processed_row = list(row)
+
+        for idx, elem in enumerate(row):
+            processed_row[idx] = idx_to_processor[idx](elem)
+
+        processed_rows.append(processed_row)
+
+    return pd.DataFrame(processed_rows, columns=cursor.column_names)
+
+
+def sql_table_to_df(
+    cursor: MySQLCursorAbstract, schema_name: str, table_name: str
+) -> pd.DataFrame:
+    """
+    Load the entire contents of a SQL table into a pandas DataFrame.
+
+    Args:
+        cursor: MySQLCursorAbstract to execute the query.
+        schema_name: Name of the schema containing the table.
+        table_name: Name of the table to fetch.
+
+    Returns:
+        DataFrame containing all rows from the specified table.
+
+    Raises:
+        DatabaseError:
+            If the table does not exist
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+        ValueError: If the schema or table name is not valid
+    """
+    validate_name(schema_name)
+    validate_name(table_name)
+
+    execute_sql(cursor, f"SELECT * FROM {schema_name}.{table_name}")
+    return sql_response_to_df(cursor)
+
+
+# Table operations
+
+
+def table_exists(
+    cursor: MySQLCursorAbstract, schema_name: str, table_name: str
+) -> bool:
+    """
+    Check whether a table exists in a specific schema.
+
+    Args:
+        cursor: MySQLCursorAbstract object to execute the query.
+        schema_name: Name of the database schema.
+        table_name: Name of the table.
+
+    Returns:
+        True if the table exists, False otherwise.
+
+    Raises:
+        DatabaseError:
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+        ValueError: If the schema or table name is not valid
+    """
+    validate_name(schema_name)
+    validate_name(table_name)
+
+    cursor.execute(
+        """
+        SELECT 1
+        FROM information_schema.tables
+        WHERE table_schema = %s AND table_name = %s
+        LIMIT 1
+        """,
+        (schema_name, table_name),
+    )
+    return cursor.fetchone() is not None
+
+
+def delete_sql_table(
+    cursor: MySQLCursorAbstract, schema_name: str, table_name: str
+) -> None:
+    """
+    Drop a table from the SQL database if it exists.
+
+    Args:
+        cursor: MySQLCursorAbstract to execute the drop command.
+        schema_name: Name of the schema.
+        table_name: Name of the table to delete.
+
+    Returns:
+        None
+
+    Raises:
+        DatabaseError:
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+        ValueError: If the schema or table name is not valid
+    """
+    validate_name(schema_name)
+    validate_name(table_name)
+
+    execute_sql(cursor, f"DROP TABLE IF EXISTS {schema_name}.{table_name}")
+
+
+def extend_sql_table(
+    cursor: MySQLCursorAbstract,
+    schema_name: str,
+    table_name: str,
+    df: pd.DataFrame,
+    col_name_to_placeholder_string: Dict[str, str] = None,
+) -> None:
+    """
+    Insert all rows from a pandas DataFrame into an existing SQL table.
+
+    Args:
+        cursor: MySQLCursorAbstract for execution.
+        schema_name: Name of the database schema.
+        table_name: Table to insert new rows into.
+        df: DataFrame containing the rows to insert.
+        col_name_to_placeholder_string:
+            Optional mapping of column names to custom SQL value/placeholder
+            strings.
+
+    Returns:
+        None
+
+    Raises:
+        DatabaseError:
+            If the rows could not be inserted into the table, e.g., a type or shape issue
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+        ValueError: If the schema or table name is not valid
+    """
+    if col_name_to_placeholder_string is None:
+        col_name_to_placeholder_string = {}
+
+    validate_name(schema_name)
+    validate_name(table_name)
+    for col in df.columns:
+        validate_name(str(col))
+
+    qualified_table_name = f"{schema_name}.{table_name}"
+
+    # Iterate over all rows in the DataFrame to build insert statements row by row
+    for row in df.values:
+        placeholders, params = [], []
+        for elem, col in zip(row, df.columns):
+            elem = elem.item() if hasattr(elem, "item") else elem
+
+            if col in col_name_to_placeholder_string:
+                elem_placeholder, elem_params = col_name_to_placeholder_string[col], [
+                    str(elem)
+                ]
+            else:
+                elem_placeholder, elem_params = format_value_sql(elem)
+
+            placeholders.append(elem_placeholder)
+            params.extend(elem_params)
+
+        cols_sql = ", ".join([str(col) for col in df.columns])
+        placeholders_sql = ", ".join(placeholders)
+        insert_sql = (
+            f"INSERT INTO {qualified_table_name} "
+            f"({cols_sql}) VALUES ({placeholders_sql})"
+        )
+        execute_sql(cursor, insert_sql, params=params)
+
+
+def sql_table_from_df(
+    cursor: MySQLCursorAbstract, schema_name: str, df: pd.DataFrame
+) -> Tuple[str, str]:
+    """
+    Create a new SQL table with a random name, and populate it with data from a DataFrame.
+
+    If an 'id' column is defined in the dataframe, it will be used as the primary key.
+
+    Args:
+        cursor: MySQLCursorAbstract for executing SQL.
+        schema_name: Schema in which to create the table.
+        df: DataFrame containing the data to be inserted.
+
+    Returns:
+        Tuple (qualified_table_name, table_name): The schema-qualified and
+        unqualified table names.
+
+    Raises:
+        RuntimeError: If a random available table name could not be found.
+        ValueError: If any schema, table, or a column name is invalid.
+        DatabaseError:
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+    """
+    table_name = get_random_name(
+        lambda table_name: not table_exists(cursor, schema_name, table_name)
+    )
+    qualified_table_name = f"{schema_name}.{table_name}"
+
+    validate_name(schema_name)
+    validate_name(table_name)
+    for col in df.columns:
+        validate_name(str(col))
+
+    columns_sql = []
+    for col, dtype in df.dtypes.items():
+        # Map pandas dtype to SQL type, fallback is VARCHAR
+        sql_type = PD_TO_SQL_DTYPE_MAPPING.get(str(dtype), "LONGTEXT")
+        validate_name(str(col))
+        columns_sql.append(f"{col} {sql_type}")
+
+    columns_str = ", ".join(columns_sql)
+
+    has_id_col = any(col.lower() == "id" for col in df.columns)
+    if has_id_col:
+        columns_str += ", PRIMARY KEY (id)"
+
+    # Create table with generated columns
+    create_table_sql = f"CREATE TABLE {qualified_table_name} ({columns_str})"
+    execute_sql(cursor, create_table_sql)
+
+    try:
+        # Insert provided data into new table
+        extend_sql_table(cursor, schema_name, table_name, df)
+    except Exception:  # pylint: disable=broad-exception-caught
+        # Delete table before we lose access to it
+        delete_sql_table(cursor, schema_name, table_name)
+        raise
+    return qualified_table_name, table_name
+
+
+def validate_name(name: str) -> str:
+    """
+    Validate that the string is a legal SQL identifier (letters, digits, underscores).
+
+    Args:
+        name: Name (schema, table, or column) to validate.
+
+    Returns:
+        The validated name.
+
+    Raises:
+        ValueError: If the name does not meet format requirements.
+    """
+    # Accepts only letters, digits, and underscores; change as needed
+    if not (isinstance(name, str) and re.match(r"^[A-Za-z0-9_]+$", name)):
+        raise ValueError(f"Unsupported name format {name}")
+
+    return name
+
+
+def source_schema(db_connection: MySQLConnectionAbstract) -> str:
+    """
+    Retrieve the name of the currently selected schema, or set and ensure the default schema.
+
+    Args:
+        db_connection: MySQL connector database connection object.
+
+    Returns:
+        Name of the schema (database in use).
+
+    Raises:
+        ValueError: If the schema name is not valid
+        DatabaseError:
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+    """
+    schema = db_connection.database
+    if schema is None:
+        schema = DEFAULT_SCHEMA
+
+        with atomic_transaction(db_connection) as cursor:
+            create_database_stmt = f"CREATE DATABASE IF NOT EXISTS {schema}"
+            execute_sql(cursor, create_database_stmt)
+
+    validate_name(schema)
+
+    return schema
+
+
+def is_table_empty(
+    cursor: MySQLCursorAbstract, schema_name: str, table_name: str
+) -> bool:
+    """
+    Determine if a given SQL table is empty.
+
+    Args:
+        cursor: MySQLCursorAbstract with access to the database.
+        schema_name: Name of the schema containing the table.
+        table_name: Name of the table to check.
+
+    Returns:
+        True if the table has no rows, False otherwise.
+
+    Raises:
+        DatabaseError:
+            If the table does not exist
+            If a database connection issue occurs.
+            If an operational error occurs during execution.
+        ValueError: If the schema or table name is not valid
+    """
+    validate_name(schema_name)
+    validate_name(table_name)
+
+    cursor.execute(f"SELECT 1 FROM {schema_name}.{table_name} LIMIT 1")
+    return cursor.fetchone() is None
+
+
+def convert_to_df(
+    arr: Optional[Union[pd.DataFrame, pd.Series, np.ndarray]],
+    col_prefix: str = "feature",
+) -> Optional[pd.DataFrame]:
+    """
+    Convert input data to a pandas DataFrame if necessary.
+
+    Args:
+        arr: Input data as a pandas DataFrame, NumPy ndarray, pandas Series, or None.
+
+    Returns:
+        If the input is None, returns None.
+        Otherwise, returns a DataFrame backed by the same underlying data whenever
+        possible (except in cases where pandas or NumPy must copy, such as for
+        certain views or non-contiguous arrays).
+
+    Notes:
+        - If an ndarray is passed, column names will be integer indices (0, 1, ...).
+        - If a DataFrame is passed, column names and indices are preserved.
+        - The returned DataFrame is a shallow copy and shares data with the original
+          input when possible; however, copies may still occur for certain input
+          types or memory layouts.
+    """
+    if arr is None:
+        return None
+
+    if isinstance(arr, pd.DataFrame):
+        return pd.DataFrame(arr)
+    if isinstance(arr, pd.Series):
+        return arr.to_frame()
+
+    if arr.ndim == 1:
+        arr = arr.reshape(-1, 1)
+    col_names = [f"{col_prefix}_{idx}" for idx in range(arr.shape[1])]
+
+    return pd.DataFrame(arr, columns=col_names, copy=False)
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/connector/aio/py.typed 9.5.0-1/mysql-connector-python/lib/mysql/connector/aio/py.typed
--- 9.4.0-1/mysql-connector-python/lib/mysql/connector/aio/py.typed	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/connector/aio/py.typed	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/connector/django/__init__.py 9.5.0-1/mysql-connector-python/lib/mysql/connector/django/__init__.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/connector/django/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/connector/django/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/connector/opentelemetry/__init__.py 9.5.0-1/mysql-connector-python/lib/mysql/connector/opentelemetry/__init__.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/connector/opentelemetry/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/connector/opentelemetry/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2023, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/connector/py.typed 9.5.0-1/mysql-connector-python/lib/mysql/connector/py.typed
--- 9.4.0-1/mysql-connector-python/lib/mysql/connector/py.typed	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/connector/py.typed	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/lib/mysql/connector/version.py 9.5.0-1/mysql-connector-python/lib/mysql/connector/version.py
--- 9.4.0-1/mysql-connector-python/lib/mysql/connector/version.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/lib/mysql/connector/version.py	2025-10-15 05:27:11.000000000 +0000
@@ -32,7 +32,7 @@ The file version.py gets installed and i
 as mysql.connector.version.
 """
 
-VERSION = (9, 4, 0, "", 1)
+VERSION = (9, 5, 0, "", 1)
 
 # pylint: disable=consider-using-f-string
 if VERSION[3] and VERSION[4]:
diff -pruN 9.4.0-1/mysql-connector-python/setup.py 9.5.0-1/mysql-connector-python/setup.py
--- 9.4.0-1/mysql-connector-python/setup.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/setup.py	2025-10-15 05:27:11.000000000 +0000
@@ -39,7 +39,6 @@ sys.path.insert(0, ".")
 
 from cpydist import BuildExt, Install, InstallLib
 from cpydist.bdist import DistBinary
-from cpydist.bdist_solaris import DistSolaris
 from cpydist.sdist import DistSource
 from setuptools import Extension, find_packages, setup
 
@@ -65,7 +64,6 @@ with open(version_py, "rb") as fp:
 
 COMMAND_CLASSES = {
     "bdist": DistBinary,
-    "bdist_solaris": DistSolaris,
     "build_ext": BuildExt,
     "install": Install,
     "install_lib": InstallLib,
@@ -140,11 +138,11 @@ def main() -> None:
             "Operating System :: POSIX :: Linux",
             "Operating System :: Unix",
             "Programming Language :: Python :: 3",
-            "Programming Language :: Python :: 3.9",
             "Programming Language :: Python :: 3.10",
             "Programming Language :: Python :: 3.11",
             "Programming Language :: Python :: 3.12",
             "Programming Language :: Python :: 3.13",
+            "Programming Language :: Python :: 3.14",
             "Topic :: Database",
             "Topic :: Software Development",
             "Topic :: Software Development :: Libraries :: Python Modules",
@@ -152,7 +150,7 @@ def main() -> None:
         ],
         ext_modules=EXTENSIONS,
         cmdclass=COMMAND_CLASSES,
-        python_requires=">=3.9",
+        python_requires=">=3.10",
         extras_require={
             "dns-srv": ["dnspython==2.6.1"],
             "gssapi": ["gssapi==1.8.3"],
diff -pruN 9.4.0-1/mysql-connector-python/src/version_info.rc 9.5.0-1/mysql-connector-python/src/version_info.rc
--- 9.4.0-1/mysql-connector-python/src/version_info.rc	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/src/version_info.rc	2025-10-15 05:27:11.000000000 +0000
@@ -34,8 +34,8 @@
 #include <windows.h>
 #include <winver.h>
 
-#define CONPY_VERSION "9.4.0"
-#define CONPY_VERSION_RAW 9,4,0,0
+#define CONPY_VERSION "9.5.0"
+#define CONPY_VERSION_RAW 9,5,0,0
 
 // Set up debug information
 #if DBG
diff -pruN 9.4.0-1/mysql-connector-python/tests/__init__.py 9.5.0-1/mysql-connector-python/tests/__init__.py
--- 9.4.0-1/mysql-connector-python/tests/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2013, 2024, Oracle and/or its affiliates.
+# Copyright (c) 2013, 2025, Oracle and/or its affiliates.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License, version 2.0, as
@@ -46,7 +46,7 @@ import sys
 import traceback
 import unittest
 
-from distutils.dist import Distribution
+from setuptools.dist import Distribution
 from functools import lru_cache, wraps
 from pkgutil import walk_packages
 from time import sleep
@@ -103,6 +103,7 @@ OPTIONS_INIT = False
 
 MYSQL_EXTERNAL_SERVER = False
 MYSQL_SERVERS_NEEDED = 1
+MYSQL_ML_ENABLED = False
 MYSQL_SERVERS = []
 MYSQL_VERSION = ()
 MYSQL_LICENSE = ""
@@ -522,7 +523,15 @@ def cnx_aio_config(**extra_config):
     return _cnx_config
 
 
-def foreach_cnx(*cnx_classes, **extra_config):
+def foreach_cnx(*cnx_classes, always_setup=False, **extra_config):
+    """
+    Decorator to wrap a function. The decorator sets a self.cnx to 
+
+    Args:
+        cnx_classes: The cnx classes to iterate/test over for generating different connectors
+        always_setup: Whether every invocation should call setUp and tearDown
+        extra_config: Additional information for instantiating connectors
+    """
     def _use_cnx(func):
         @wraps(func)
         def wrapper(self, *args, **kwargs):
@@ -534,6 +543,10 @@ def foreach_cnx(*cnx_classes, **extra_co
             for cnx_class in cnx_classes or self.all_cnx_classes:
                 if cnx_class is None:
                     continue
+
+                if always_setup:
+                    self.setUp()
+
                 try:
                     self.cnx = cnx_class(**self.config)
                     self._testMethodName = "{0} (using {1})".format(
@@ -559,6 +572,9 @@ def foreach_cnx(*cnx_classes, **extra_co
                         # Might already be closed.
                         pass
 
+                    if always_setup:
+                        self.tearDown()
+
         return wrapper
 
     return _use_cnx
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/__init__.py 9.5.0-1/mysql-connector-python/tests/ai/__init__.py
--- 9.4.0-1/mysql-connector-python/tests/ai/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/constants.py 9.5.0-1/mysql-connector-python/tests/ai/constants.py
--- 9.4.0-1/mysql-connector-python/tests/ai/constants.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/constants.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,34 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+DEFAULT_SCHEMA = "myconnpy"
+MYSQL_CONNECTOR_RANDOM_NAME_SPACE = "TEST_MYSQL_CONNECTOR"
+
+AI_SKIP_MESSAGE = "MySQL AI ML/GenAI Procedures Must be Installed for AI Tests"
+
+DEFAULT_CONNECTION_TIMEOUT = 300  # 5 minutes
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/genai/__init__.py 9.5.0-1/mysql-connector-python/tests/ai/genai/__init__.py
--- 9.4.0-1/mysql-connector-python/tests/ai/genai/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/genai/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/genai/test_embedding.py 9.5.0-1/mysql-connector-python/tests/ai/genai/test_embedding.py
--- 9.4.0-1/mysql-connector-python/tests/ai/genai/test_embedding.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/genai/test_embedding.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,239 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import json
+import unittest
+
+from typing import List, Optional, Tuple
+from unittest.mock import MagicMock, patch
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import (
+    AI_SKIP_MESSAGE,
+    DEFAULT_CONNECTION_TIMEOUT,
+    DEFAULT_SCHEMA,
+)
+from tests.ai.utilities import MyAITest, random_name_patcher
+
+from mysql.connector.errors import DatabaseError
+
+if tests.MYSQL_ML_ENABLED:
+    import mysql.ai.utils
+
+    from mysql.ai.genai import MyEmbeddings
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestMyEmbedding(MyAITest):
+    def setUp(self):
+        super().setUp()
+
+        # Patch both embedding/utils execute_sql and patch random name generation for deterministic testing.
+        self.mock_exec = MagicMock(wraps=mysql.ai.utils.execute_sql)
+        self.embed_execute_patcher = patch(
+            "mysql.ai.genai.embedding.execute_sql", self.mock_exec
+        )
+        self.utils_execute_patcher = patch(
+            "mysql.ai.utils.utils.execute_sql", self.mock_exec
+        )
+
+        self.name_patcher = random_name_patcher()
+
+        self.embed_execute_patcher.start()
+        self.utils_execute_patcher.start()
+        self.name_patcher.start()
+
+    def tearDown(self):
+        self.embed_execute_patcher.stop()
+        self.utils_execute_patcher.stop()
+        self.name_patcher.stop()
+
+        super().tearDown()
+
+    def get_expected_sql_for_embed(
+        self,
+        qualified_table_name: str,
+        texts: List[str],
+        options: Optional[dict] = None,
+    ) -> List[str]:
+        # Programmatic construction of expected SQL interaction sequence for embedding.
+        if options is None:
+            options_value = "%s"
+        else:
+            options_value = "CAST(%s as JSON)"
+            options = json.dumps(options)
+        embed_params = [options]
+
+        expected_calls = [
+            # (SQL statement, params)
+            (
+                f"CREATE TABLE {qualified_table_name} (id BIGINT, text LONGTEXT, PRIMARY KEY (id))",
+                None,
+            ),
+        ]
+
+        for i, text in enumerate(texts):
+            expected_calls.append(
+                (
+                    f"INSERT INTO {qualified_table_name} (id, text) VALUES (%s, %s)",
+                    [i, text],
+                )
+            )
+
+        expected_calls += [
+            (
+                f"CALL sys.ML_EMBED_TABLE('{qualified_table_name}.text', '{qualified_table_name}.embeddings', {options_value})",
+                embed_params,
+            ),
+            (f"SELECT * FROM {qualified_table_name}", None),
+            (f"DROP TABLE IF EXISTS {qualified_table_name}", None),
+        ]
+        return expected_calls
+
+    def check_call(
+        self,
+        responses: List[List[float]],
+        expected_calls: List[Tuple[str, list]],
+    ) -> None:
+        # Composite assertion for both output embedding shape/type and full SQL call trace (mock_exec).
+        call_args_list = self.mock_exec.call_args_list
+
+        # Validate consistent shape and type of responses
+        if responses:
+            response_length = len(responses[0])
+            for response in responses:
+                self.assertIsInstance(response, list)
+                self.assertEqual(response_length, len(response))
+                self.assertTrue(all(isinstance(x, float) for x in response))
+
+        # Validate that the db queries/stmts are as expected
+        self.assertEqual(len(call_args_list), len(expected_calls))
+        for call, (expected_stmt, expected_params) in zip(
+            call_args_list, expected_calls
+        ):
+            self.assertEqual(call.args[1], expected_stmt)
+            if not expected_params:
+                self.assertEqual(len(call.kwargs), 0)
+            else:
+                self.assertEqual(len(call.kwargs), 1)
+                self.assertEqual(call.kwargs["params"], expected_params)
+
+    """
+    Embedding tests
+    """
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_embed_query_basic(self):
+        embedder = MyEmbeddings(self.cnx)
+        response = [embedder.embed_query("Text1")]
+
+        expected_calls = [('SELECT sys.ML_EMBED_ROW("%s", %s)', ("Text1", None))]
+
+        self.check_call(response, expected_calls)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_embed_document_basic(self):
+        embedder = MyEmbeddings(self.cnx)
+        response = embedder.embed_documents(["Text1"])
+        self.assertEqual(len(response), 1)
+
+        table_name = f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAA"
+        expected_calls = self.get_expected_sql_for_embed(table_name, ["Text1"])
+
+        self.check_call(response, expected_calls)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_embed_document_multi(self):
+        embedder = MyEmbeddings(self.cnx)
+        response = embedder.embed_documents(["Text1", "Text2"])
+        self.assertEqual(len(response), 2)
+
+        table_name = f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAA"
+        expected_calls = self.get_expected_sql_for_embed(table_name, ["Text1", "Text2"])
+
+        self.check_call(response, expected_calls)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_embed_document_empty(self):
+        embedder = MyEmbeddings(self.cnx)
+        response = embedder.embed_documents([])
+        self.assertEqual(len(response), 0)
+
+        expected_calls = []
+
+        self.check_call(response, expected_calls)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_embed_document_valid_options(self):
+        options = {"truncate": True}
+        embedder = MyEmbeddings(self.cnx, options=options)
+        response = embedder.embed_documents(["Text1"])
+        self.assertEqual(len(response), 1)
+
+        table_name = f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAA"
+        expected_calls = self.get_expected_sql_for_embed(table_name, ["Text1"], options)
+
+        self.check_call(response, expected_calls)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_embed_failure(self):
+        options = {"truncate": False}
+        embedder = MyEmbeddings(self.cnx, options=options)
+        LONG_QUERY = 1024
+        with self.assertRaises(ValueError):
+            embedder.embed_documents(
+                ["Text1", " ".join(["A" for _ in range(LONG_QUERY)])]
+            )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_embed_document_invalid_options(self):
+        options = {"fake_option": True}
+        with self.assertRaises(DatabaseError):
+            embedder = MyEmbeddings(self.cnx, options=options)
+            embedder.embed_documents(["Text1"])
+
+        table_name = f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAA"
+        expected_calls = [
+            # (SQL statement, params)
+            (
+                f"CREATE TABLE {table_name} (id BIGINT, text LONGTEXT, PRIMARY KEY (id))",
+                None,
+            ),
+            (
+                f"INSERT INTO {table_name} (id, text) VALUES (%s, %s)",
+                [0, "Text1"],
+            ),
+            (
+                f"CALL sys.ML_EMBED_TABLE('{table_name}.text', '{table_name}.embeddings', CAST(%s as JSON))",
+                [json.dumps(options)],
+            ),
+            (f"DROP TABLE IF EXISTS {table_name}", None),
+        ]
+        self.check_call(None, expected_calls)
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/genai/test_generation.py 9.5.0-1/mysql-connector-python/tests/ai/genai/test_generation.py
--- 9.4.0-1/mysql-connector-python/tests/ai/genai/test_generation.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/genai/test_generation.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,193 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import json
+import unittest
+
+from typing import Optional
+from unittest.mock import patch
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import AI_SKIP_MESSAGE, DEFAULT_CONNECTION_TIMEOUT
+from tests.ai.utilities import MyAITest
+
+from mysql.connector.abstracts import MySQLConnectionAbstract
+from mysql.connector.errors import DatabaseError
+
+if tests.MYSQL_ML_ENABLED:
+    import mysql.ai.utils
+
+    from mysql.ai.genai import MyLLM
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestMyLLM(MyAITest):
+    def _llm_hello_world(
+        self,
+        conn: MySQLConnectionAbstract,
+        prompt: str = "Hello world",
+        options: Optional[dict] = None,
+    ):
+        # Utility to invoke LLM consistently for all tests, with configurable prompt and options.
+        options = {} if options is None else options
+        llm = MyLLM(conn)
+        output = llm.invoke(prompt, **options)
+        return output
+
+    def check_call(
+        self, response: Optional[str], call_args: "CallArgs", query: str, params: tuple
+    ) -> None:
+        # Validates response and checks full SQL call signature (args/kwargs) to match expected generation input.
+        if response is not None:
+            self.assertIsInstance(response, str)
+            self.assertTrue(len(response) > 1)
+
+        args, kwargs = call_args.args, call_args.kwargs
+        self.assertEqual(len(args), 2)
+        self.assertEqual(len(kwargs), 1)
+
+        self.assertEqual(args[1], query)
+        self.assertEqual(kwargs["params"], params)
+
+    """
+    Generation tests
+    """
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_llm_basic(self):
+        with patch(
+            "mysql.ai.genai.generation.execute_sql", wraps=mysql.ai.utils.execute_sql
+        ) as mock_exec:
+            # Use patching and mock-exec to ensure no real DB execution and to fully check query/param generation.
+            response = self._llm_hello_world(self.cnx)
+            self.assertEqual(len(mock_exec.call_args_list), 1)
+            self.check_call(
+                response,
+                mock_exec.call_args_list[0],
+                'SELECT sys.ML_GENERATE("%s", %s);',
+                ("Hello world", None),
+            )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_llm_valid_option(self):
+        with patch(
+            "mysql.ai.genai.generation.execute_sql", wraps=mysql.ai.utils.execute_sql
+        ) as mock_exec:
+            options = {"max_tokens": 1}
+            response = self._llm_hello_world(self.cnx, options=options)
+            self.assertEqual(len(mock_exec.call_args_list), 1)
+            self.check_call(
+                response,
+                mock_exec.call_args_list[0],
+                'SELECT sys.ML_GENERATE("%s", CAST(%s as JSON));',
+                ("Hello world", json.dumps(options)),
+            )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_llm_invalid_option(self):
+        with patch(
+            "mysql.ai.genai.generation.execute_sql", wraps=mysql.ai.utils.execute_sql
+        ) as mock_exec:
+            options = {"max_tokens": -1}
+            with self.assertRaises(DatabaseError):
+                self._llm_hello_world(self.cnx, options=options)
+
+            self.assertEqual(len(mock_exec.call_args_list), 1)
+            self.check_call(
+                None,
+                mock_exec.call_args_list[0],
+                'SELECT sys.ML_GENERATE("%s", CAST(%s as JSON));',
+                ("Hello world", json.dumps(options)),
+            )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_llm_empty_input(self):
+        with patch(
+            "mysql.ai.genai.generation.execute_sql", wraps=mysql.ai.utils.execute_sql
+        ) as mock_exec:
+            response = self._llm_hello_world(self.cnx, prompt="")
+
+            self.assertEqual(len(mock_exec.call_args_list), 1)
+            self.check_call(
+                response,
+                mock_exec.call_args_list[0],
+                'SELECT sys.ML_GENERATE("%s", %s);',
+                ("", None),
+            )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_llm_stop_option(self):
+        with patch(
+            "mysql.ai.genai.generation.execute_sql", wraps=mysql.ai.utils.execute_sql
+        ) as mock_exec:
+            llm = MyLLM(self.cnx)
+            stop_words = ["stop1", "stop2"]
+            response = llm.invoke("Hello world", stop=stop_words)
+            self.assertEqual(len(mock_exec.call_args_list), 1)
+            self.check_call(
+                response,
+                mock_exec.call_args_list[0],
+                'SELECT sys.ML_GENERATE("%s", CAST(%s as JSON));',
+                ("Hello world", json.dumps({"stop_sequences": stop_words})),
+            )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_llm_multiple_calls(self):
+        with patch(
+            "mysql.ai.genai.generation.execute_sql", wraps=mysql.ai.utils.execute_sql
+        ) as mock_exec:
+            llm = MyLLM(self.cnx)
+
+            response1 = llm.invoke("Hello1")
+            self.check_call(
+                response1,
+                mock_exec.call_args_list[0],
+                'SELECT sys.ML_GENERATE("%s", %s);',
+                ("Hello1", None),
+            )
+
+            response2 = llm.invoke("Hello2")
+            self.check_call(
+                response2,
+                mock_exec.call_args_list[1],
+                'SELECT sys.ML_GENERATE("%s", %s);',
+                ("Hello2", None),
+            )
+
+            self.assertEqual(len(mock_exec.call_args_list), 2)
+
+    """
+    Model fields tests
+    """
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test__llm_type(self):
+        llm = MyLLM(self.cnx)
+        self.assertEqual(llm._llm_type, "mysql_heatwave_llm")
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/genai/test_vector_store.py 9.5.0-1/mysql-connector-python/tests/ai/genai/test_vector_store.py
--- 9.4.0-1/mysql-connector-python/tests/ai/genai/test_vector_store.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/genai/test_vector_store.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,450 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import json
+import textwrap
+import unittest
+
+from typing import List, Tuple
+from unittest.mock import MagicMock, patch
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import (
+    AI_SKIP_MESSAGE,
+    DEFAULT_CONNECTION_TIMEOUT,
+    DEFAULT_SCHEMA,
+)
+from tests.ai.utilities import MyAITest, random_name_patcher
+
+if tests.MYSQL_ML_ENABLED:
+    import mysql.ai.utils
+
+    from langchain_core.documents import Document
+    from mysql.ai.genai import MyEmbeddings, MyVectorStore
+
+    texts = ["A", "B", "C"]
+    metadatas = [{}, {"key": 1}, {"key": []}, {"key": {}}]
+
+    # Needs to be at least 2d for similarity search with cosine
+    embeddings = {
+        "A": [1.0, -1.0],
+        "B": [1.0, 1.0],
+        "C": [1.0, 1.01],
+        "Hello world!": [0.0, 0.0],
+    }
+
+
+def get_dummy_embeddings():
+    # Produces a MyEmbeddings stub where each string maps to a fixed embedding vector, used for similarity tests.
+    def embed_query(text: str) -> List[float]:
+        return embeddings[text]
+
+    def embed_documents(texts: List[str]) -> List[List[float]]:
+        return [embed_query(text) for text in texts]
+
+    mock = MagicMock(spec=MyEmbeddings)
+    mock.embed_query.side_effect = embed_query
+    mock.embed_documents.side_effect = embed_documents
+
+    return mock
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestVectorStore(MyAITest):
+    def setUp(self):
+        super().setUp()
+
+        self.maxDiff = None
+
+        # Patch both vector_store/utils execute_sql and patch random name generator for deterministic and verifiable testing.
+        self.mock_exec = MagicMock(wraps=mysql.ai.utils.execute_sql)
+        self.embed_execute_patcher = patch(
+            "mysql.ai.genai.vector_store.execute_sql", self.mock_exec
+        )
+        self.utils_execute_patcher = patch(
+            "mysql.ai.utils.utils.execute_sql", self.mock_exec
+        )
+
+        self.name_patcher = random_name_patcher()
+
+        self.embed_execute_patcher.start()
+        self.utils_execute_patcher.start()
+        self.name_patcher.start()
+
+    def tearDown(self):
+        self.embed_execute_patcher.stop()
+        self.utils_execute_patcher.stop()
+        self.name_patcher.stop()
+
+        super().tearDown()
+
+    def check_call(self, expected_calls: List[Tuple[str, list]]) -> None:
+        # Asserts the generated SQL (after removing whitespace differences) and params sequence for strict correctness.
+        call_args_list = self.mock_exec.call_args_list
+        self.assertEqual(len(call_args_list), len(expected_calls))
+        for call, (expected_stmt, expected_params) in zip(
+            call_args_list, expected_calls
+        ):
+            self.assertEqual(
+                textwrap.dedent(call.args[1]).strip(),
+                textwrap.dedent(expected_stmt).strip(),
+            )
+            if expected_params is None:
+                self.assertEqual(call.kwargs, {})
+            else:
+                self.assertEqual(len(call.kwargs), 1)
+                self.assertEqual(list(call.kwargs["params"]), expected_params)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_from_texts(self):
+        embedder = get_dummy_embeddings()
+
+        vector_store = MyVectorStore.from_texts(
+            texts, embedder, metadatas=metadatas, db_connection=self.cnx
+        )
+        results = vector_store.similarity_search("B", k=2)
+        vector_store.delete_all()
+
+        qualified_table_name = f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAA"
+        expected_calls = [
+            (
+                f"""
+                CREATE TABLE {qualified_table_name} (
+                    `id` VARCHAR(128) NOT NULL,
+                    `content` TEXT,
+                    `metadata` JSON DEFAULT NULL,
+                    `embed` vector(%s),
+                    PRIMARY KEY (`id`)
+                ) ENGINE=InnoDB;
+            """,
+                [2],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), %s)",
+                ["internal_ai_id_0", "A", "[1.0, -1.0]", None],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), CAST(%s as JSON))",
+                ["internal_ai_id_1", "B", "[1.0, 1.0]", json.dumps(metadatas[1])],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), CAST(%s as JSON))",
+                ["internal_ai_id_2", "C", "[1.0, 1.01]", json.dumps(metadatas[2])],
+            ),
+            ("SET @mysql_ai.embedding = string_to_vector(%s)", ["[1.0, 1.0]"]),
+            (
+                f"""
+                CALL sys.ML_SIMILARITY_SEARCH(
+                    @mysql_ai.embedding,
+                    JSON_ARRAY(
+                        '{qualified_table_name}'
+                    ),
+                    JSON_OBJECT(
+                        "segment", "content",
+                        "segment_embedding", "embed",
+                        "document_name", "id"
+                    ),
+                    2,
+                    %s,
+                    NULL,
+                    NULL,
+                    CAST(%s as JSON),
+                    @mysql_ai.context,
+                    @mysql_ai.context_map,
+                    @mysql_ai.retrieval_info
+                )
+            """,
+                [
+                    "COSINE",
+                    json.dumps(
+                        {
+                            "max_distance": 0.6,
+                            "percentage_distance": 20.0,
+                            "segment_overlap": 0,
+                        }
+                    ),
+                ],
+            ),
+            ("SELECT @mysql_ai.context_map", None),
+            (
+                f"SELECT id, content, metadata FROM {qualified_table_name} WHERE id = %s",
+                ["internal_ai_id_1"],
+            ),
+            (
+                f"SELECT id, content, metadata FROM {qualified_table_name} WHERE id = %s",
+                ["internal_ai_id_2"],
+            ),
+            (f"DROP TABLE IF EXISTS {qualified_table_name}", None),
+        ]
+        self.check_call(expected_calls)
+
+        expected_results = [
+            Document(id="internal_ai_id_1", page_content="B", metadata={"key": 1}),
+            Document(id="internal_ai_id_2", page_content="C", metadata={"key": []}),
+        ]
+        for result, expected_result in zip(results, expected_results):
+            self.assertEqual(result, expected_result)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_from_texts_no_meta(self):
+        embedder = get_dummy_embeddings()
+
+        vector_store = MyVectorStore.from_texts(
+            texts, embedder, metadatas=None, db_connection=self.cnx
+        )
+        results = vector_store.similarity_search("B", k=2)
+        vector_store.delete_all()
+
+        qualified_table_name = f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAA"
+        expected_calls = [
+            (
+                f"""
+                CREATE TABLE {qualified_table_name} (
+                    `id` VARCHAR(128) NOT NULL,
+                    `content` TEXT,
+                    `metadata` JSON DEFAULT NULL,
+                    `embed` vector(%s),
+                    PRIMARY KEY (`id`)
+                ) ENGINE=InnoDB;
+            """,
+                [2],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), %s)",
+                ["internal_ai_id_0", "A", "[1.0, -1.0]", None],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), %s)",
+                ["internal_ai_id_1", "B", "[1.0, 1.0]", None],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), %s)",
+                ["internal_ai_id_2", "C", "[1.0, 1.01]", None],
+            ),
+            ("SET @mysql_ai.embedding = string_to_vector(%s)", ["[1.0, 1.0]"]),
+            (
+                f"""
+                CALL sys.ML_SIMILARITY_SEARCH(
+                    @mysql_ai.embedding,
+                    JSON_ARRAY(
+                        '{qualified_table_name}'
+                    ),
+                    JSON_OBJECT(
+                        "segment", "content",
+                        "segment_embedding", "embed",
+                        "document_name", "id"
+                    ),
+                    2,
+                    %s,
+                    NULL,
+                    NULL,
+                    CAST(%s as JSON),
+                    @mysql_ai.context,
+                    @mysql_ai.context_map,
+                    @mysql_ai.retrieval_info
+                )
+            """,
+                [
+                    "COSINE",
+                    json.dumps(
+                        {
+                            "max_distance": 0.6,
+                            "percentage_distance": 20.0,
+                            "segment_overlap": 0,
+                        }
+                    ),
+                ],
+            ),
+            ("SELECT @mysql_ai.context_map", None),
+            (
+                f"SELECT id, content, metadata FROM {qualified_table_name} WHERE id = %s",
+                ["internal_ai_id_1"],
+            ),
+            (
+                f"SELECT id, content, metadata FROM {qualified_table_name} WHERE id = %s",
+                ["internal_ai_id_2"],
+            ),
+            (f"DROP TABLE IF EXISTS {qualified_table_name}", None),
+        ]
+        self.check_call(expected_calls)
+
+        expected_results = [
+            Document(id="internal_ai_id_1", page_content="B"),
+            Document(id="internal_ai_id_2", page_content="C"),
+        ]
+        for result, expected_result in zip(results, expected_results):
+            self.assertEqual(result, expected_result)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_add_documents(self):
+        embedder = get_dummy_embeddings()
+
+        vector_store = MyVectorStore(self.cnx, embedder)
+
+        # check empty
+        result = vector_store.add_documents([])
+        self.assertEqual(result, [])
+
+        ids, documents = [], []
+        for i, (text, metadata) in enumerate(zip(texts, metadatas)):
+            ids.append(f"external_id_{i}")
+            documents.append(Document(page_content=text, metadata=metadata))
+
+        # check that we validate ids same length as documents
+        with self.assertRaises(ValueError):
+            vector_store.add_documents(
+                documents, ids=[i for i in range(len(documents) + 1)]
+            )
+
+        result_ids = vector_store.add_documents(documents, ids=ids)
+        self.assertEqual(result_ids, ids)
+
+        vector_store.delete(ids)
+        ids = vector_store.add_documents(documents)
+        vector_store.delete(ids)
+
+        qualified_table_name1 = (
+            f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAA"
+        )
+        qualified_table_name2 = (
+            f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAB"
+        )
+        expected_calls = [
+            (
+                f"""
+                CREATE TABLE {qualified_table_name1} (
+                    `id` VARCHAR(128) NOT NULL,
+                    `content` TEXT,
+                    `metadata` JSON DEFAULT NULL,
+                    `embed` vector(%s),
+                    PRIMARY KEY (`id`)
+                ) ENGINE=InnoDB;
+            """,
+                [2],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name1} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), %s)",
+                ["external_id_0", "A", "[1.0, -1.0]", None],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name1} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), CAST(%s as JSON))",
+                ["external_id_1", "B", "[1.0, 1.0]", json.dumps(metadatas[1])],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name1} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), CAST(%s as JSON))",
+                ["external_id_2", "C", "[1.0, 1.01]", json.dumps(metadatas[2])],
+            ),
+            (
+                f"DELETE FROM {qualified_table_name1} WHERE id = %s",
+                ["external_id_0"],
+            ),
+            (
+                f"DELETE FROM {qualified_table_name1} WHERE id = %s",
+                ["external_id_1"],
+            ),
+            (
+                f"DELETE FROM {qualified_table_name1} WHERE id = %s",
+                ["external_id_2"],
+            ),
+            (f"DROP TABLE IF EXISTS {qualified_table_name1}", None),
+            (
+                f"""
+                CREATE TABLE {qualified_table_name2} (
+                    `id` VARCHAR(128) NOT NULL,
+                    `content` TEXT,
+                    `metadata` JSON DEFAULT NULL,
+                    `embed` vector(%s),
+                    PRIMARY KEY (`id`)
+                ) ENGINE=InnoDB;
+            """,
+                [2],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name2} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), %s)",
+                ["internal_ai_id_0", "A", "[1.0, -1.0]", None],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name2} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), CAST(%s as JSON))",
+                ["internal_ai_id_1", "B", "[1.0, 1.0]", json.dumps(metadatas[1])],
+            ),
+            (
+                f"INSERT INTO {qualified_table_name2} (id, content, embed, metadata) VALUES (%s, %s, string_to_vector(%s), CAST(%s as JSON))",
+                ["internal_ai_id_2", "C", "[1.0, 1.01]", json.dumps(metadatas[2])],
+            ),
+            (
+                f"DELETE FROM {qualified_table_name2} WHERE id = %s",
+                ["internal_ai_id_0"],
+            ),
+            (
+                f"DELETE FROM {qualified_table_name2} WHERE id = %s",
+                ["internal_ai_id_1"],
+            ),
+            (
+                f"DELETE FROM {qualified_table_name2} WHERE id = %s",
+                ["internal_ai_id_2"],
+            ),
+            (f"DROP TABLE IF EXISTS {qualified_table_name2}", None),
+        ]
+        self.check_call(expected_calls)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_empty_similarity_search(self):
+        embedder = get_dummy_embeddings()
+
+        vector_store = MyVectorStore(self.cnx, embedder)
+
+        # check empty
+        result = vector_store.add_documents([])
+        self.assertEqual(result, [])
+
+        # Check that the empty similarity search does not fail
+        result = vector_store.similarity_search("test query")
+        self.assertEqual(result, [])
+
+        # No queries should have been executed for the empty similarity search
+        expected_calls = []
+        self.check_call(expected_calls)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_context_manager(self):
+        qualified_table_name = f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAA"
+
+        with MyVectorStore(self.cnx) as vector_store:
+            vector_store.add_texts(["text1"])
+
+        self.assertEqual(
+            self.mock_exec.call_args_list[-1].args[1],
+            f"DROP TABLE IF EXISTS {qualified_table_name}",
+        )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_missing_connection(self):
+        with self.assertRaises(ValueError):
+            MyVectorStore.from_texts(["Text1", "Text2"], get_dummy_embeddings())
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/ml/__init__.py 9.5.0-1/mysql-connector-python/tests/ai/ml/__init__.py
--- 9.4.0-1/mysql-connector-python/tests/ai/ml/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/ml/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
\ No newline at end of file
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/ml/test_base.py 9.5.0-1/mysql-connector-python/tests/ai/ml/test_base.py
--- 9.4.0-1/mysql-connector-python/tests/ai/ml/test_base.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/ml/test_base.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,90 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import unittest
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import AI_SKIP_MESSAGE, DEFAULT_CONNECTION_TIMEOUT
+from tests.ai.utilities import MyAITest
+
+from mysql.connector.errors import DatabaseError
+
+if tests.MYSQL_ML_ENABLED:
+    import numpy as np
+    import pandas as pd
+
+    from mysql.ai.ml.classifier import MyClassifier
+
+    ELEMS_PER_CLASS = 5
+    NUM_FEAT = 3
+    NUM_CLASSES = 2
+    NUM_ROWS = ELEMS_PER_CLASS * NUM_CLASSES
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestMyBaseMLModel(MyAITest):
+    def setUp(self):
+        super().setUp()
+        # Use a classifier as concrete for the base API
+        self.X = pd.DataFrame(
+            np.random.randn(NUM_ROWS, NUM_FEAT),
+            columns=[f"feature_{i}" for i in range(NUM_FEAT)],
+        )
+        self.y = pd.Series(
+            [i for _ in range(ELEMS_PER_CLASS) for i in range(NUM_CLASSES)],
+            name="target",
+        )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_export_import_model(self):
+        clf = MyClassifier(self.cnx)
+
+        model_info = clf.get_model_info()
+        self.assertEqual(model_info, None)
+
+        clf.fit(self.X, self.y)
+
+        model_info = clf.get_model_info()
+        self.assertIsInstance(model_info, dict)
+
+        model_name = model_info["model_handle"]
+
+        clf2 = MyClassifier(self.cnx, model_name=model_name)
+
+        self.assertTrue(np.all(clf.predict(self.X) == clf2.predict(self.X)))
+        self.assertEqual(clf.get_model_info(), clf2.get_model_info())
+
+        clf2._delete_model()
+
+        with self.assertRaises(DatabaseError):
+            clf.predict(self.X)
+
+        with self.assertRaises(DatabaseError):
+            clf2.predict(self.X)
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/ml/test_classifier.py 9.5.0-1/mysql-connector-python/tests/ai/ml/test_classifier.py
--- 9.4.0-1/mysql-connector-python/tests/ai/ml/test_classifier.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/ml/test_classifier.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,117 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import unittest
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import AI_SKIP_MESSAGE, DEFAULT_CONNECTION_TIMEOUT
+from tests.ai.utilities import MyAITest
+
+from mysql.connector.errors import DatabaseError
+
+if tests.MYSQL_ML_ENABLED:
+    import numpy as np
+    import pandas as pd
+
+    from mysql.ai.ml.classifier import MyClassifier
+    from sklearn.pipeline import Pipeline
+    from sklearn.preprocessing import StandardScaler
+
+    ELEMS_PER_CLASS = 5
+    NUM_FEAT = 3
+    NUM_CLASSES = 2
+    NUM_ROWS = NUM_CLASSES * ELEMS_PER_CLASS
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestMyClassifier(MyAITest):
+    def setUp(self):
+        super().setUp()
+        self.X = pd.DataFrame(
+            np.random.randn(NUM_ROWS, NUM_FEAT),
+            columns=[f"feature_{i}" for i in range(NUM_FEAT)],
+        )
+        self.y = pd.Series(
+            [i for _ in range(ELEMS_PER_CLASS) for i in range(NUM_CLASSES)],
+            name="target",
+        )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_pipeline_and_output_shapes(self):
+        """
+        Test MyClassifier as the head in sklearn Pipeline (with preprocessor), with strict shape checks.
+        """
+        clf = MyClassifier(self.cnx)
+        pipe = Pipeline([("scaler", StandardScaler()), ("mysql_clf", clf)])
+        pipe.fit(self.X, self.y)
+
+        preds = pipe.predict(self.X)
+        # 1D output, (N,)
+        self.assertEqual(preds.ndim, 1)
+        self.assertEqual(preds.shape, (len(self.X),))
+
+        # 2D proba output: (N, C), in [0,1], rows ~1
+        proba = pipe.named_steps["mysql_clf"].predict_proba(self.X)
+        n_classes = len(set(self.y))
+        self.assertEqual(proba.ndim, 2)
+        self.assertEqual(proba.shape, (len(self.X), n_classes))
+        self.assertTrue((proba >= 0).all() and (proba <= 1).all())
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_invalid_options_raise(self):
+        """
+        Test DatabaseError is raised if invalid options are provided via constructor to fit_extra_options and
+        predict_extra_options for their respective operations.
+        """
+        # Invalid fit options
+        clf_fit_invalid = MyClassifier(
+            self.cnx, fit_extra_options={"invalid_option": True}
+        )
+        with self.assertRaises(DatabaseError):
+            clf_fit_invalid.fit(self.X, self.y)
+
+        # Invalid predict options
+        clf_predict_invalid = MyClassifier(
+            self.cnx, predict_extra_options={"invalid_option": True}
+        )
+        clf_predict_invalid.fit(self.X, self.y)
+        with self.assertRaises(DatabaseError):
+            clf_predict_invalid.predict(self.X)
+        with self.assertRaises(DatabaseError):
+            clf_predict_invalid.predict_proba(self.X)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_explain_predictions_with_fake_options(self):
+        """Test explain with fake explain_extra_options, should raise DatabaseError."""
+        # Intentionally pass invalid explain_extra_options to confirm error handling.
+        model = MyClassifier(self.cnx, explain_extra_options={"fake_option": 123})
+        model.fit(self.X, self.y)
+        with self.assertRaises(DatabaseError):
+            model.explain_predictions(self.X)
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/ml/test_model.py 9.5.0-1/mysql-connector-python/tests/ai/ml/test_model.py
--- 9.4.0-1/mysql-connector-python/tests/ai/ml/test_model.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/ml/test_model.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,820 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import copy
+import unittest
+
+from typing import List, Tuple
+from unittest.mock import MagicMock, patch
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import (
+    AI_SKIP_MESSAGE,
+    DEFAULT_CONNECTION_TIMEOUT,
+    DEFAULT_SCHEMA,
+    MYSQL_CONNECTOR_RANDOM_NAME_SPACE,
+)
+from tests.ai.utilities import MyAITest, random_name_patcher
+
+from mysql.connector.errors import DatabaseError
+
+if tests.MYSQL_ML_ENABLED:
+    import mysql.ai.utils
+    import numpy as np
+    import pandas as pd
+
+    from mysql.ai.ml.model import MyModel
+
+ELEMS_PER_CLASS = 5
+NUM_FEAT = 2
+NUM_CLASSES = 2
+NUM_ROWS = NUM_CLASSES * ELEMS_PER_CLASS
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestMyModel(MyAITest):
+    def setUp(self):
+        self.maxDiff = None
+        super().setUp()
+
+        # Patch all execute_sql usage & random name generator for deterministic validation and SQL call capture.
+        self.mock_exec = MagicMock(wraps=mysql.ai.utils.execute_sql)
+        self.embed_execute_patcher = patch(
+            "mysql.ai.ml.model.execute_sql", self.mock_exec
+        )
+        self.utils_execute_patcher = patch(
+            "mysql.ai.utils.utils.execute_sql", self.mock_exec
+        )
+
+        self.name_patcher = random_name_patcher()
+
+        self.embed_execute_patcher.start()
+        self.utils_execute_patcher.start()
+        self.name_patcher.start()
+
+        self.X = pd.DataFrame(
+            np.random.randn(NUM_ROWS, NUM_FEAT),
+            columns=[f"feature_{i}" for i in range(NUM_FEAT)],
+        )
+
+        self.y = pd.DataFrame(
+            [i for _ in range(ELEMS_PER_CLASS) for i in range(NUM_CLASSES)],
+            columns=[f"target" for _ in range(1)],
+        )
+
+    def tearDown(self):
+        # Undo all patching for clean test isolation.
+        self.embed_execute_patcher.stop()
+        self.utils_execute_patcher.stop()
+        self.name_patcher.stop()
+
+        super().tearDown()
+
+    def check_call(
+        self,
+        call_args_list: List,
+        expected_calls: List[Tuple[str, list]],
+    ) -> None:
+        # Validate that the db queries/stmts are as expected
+        self.assertEqual(len(call_args_list), len(expected_calls))
+        for call, (expected_stmt, expected_params) in zip(
+            call_args_list, expected_calls
+        ):
+            self.assertEqual(call.args[1], expected_stmt)
+            if not expected_params:
+                self.assertEqual(len(call.kwargs), 0)
+            else:
+                self.assertEqual(len(call.kwargs), 1)
+                self.assertEqual(call.kwargs["params"], expected_params)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_classification(self):
+        X, y = self.X, self.y
+
+        model_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_test_model"
+        model_var = f"mysql_ai.{model_name}"
+
+        ml_model = MyModel(self.cnx, model_name=model_name)
+        # Verify the initial SQL preamble for model instantiation.
+        expected_calls = [
+            ("CALL sys.ML_CREATE_OR_UPGRADE_CATALOG();", None),
+            (f"SET @mysql_ai.{model_name} = %s;", (model_name,)),
+        ]
+        self.check_call(self.mock_exec.call_args_list, expected_calls)
+        self.assertEqual(len(self.mock_exec.call_args_list), len(expected_calls))
+        self.mock_exec.reset_mock()
+
+        ml_model.fit(X, y)
+        table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAA"
+        target_row = f"target"
+        # The following verifies the full ML training SQL sequence produced by .fit().
+        expected_calls = [
+            (
+                f"CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (feature_0 DOUBLE, feature_1 DOUBLE, {target_row} BIGINT)",
+                None,
+            ),
+            (
+                f"DELETE FROM ML_SCHEMA_root.MODEL_CATALOG WHERE model_handle = @{model_var}",
+                None,
+            ),
+            (
+                f"CALL sys.ML_TRAIN('{DEFAULT_SCHEMA}.{table_name}', '{target_row}', CAST(%s as JSON), @{model_var})",
+                ['{"task": "classification"}'],
+            ),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{table_name}", None),
+        ]
+        self.check_call(
+            [*self.mock_exec.call_args_list[:1], *self.mock_exec.call_args_list[-3:]],
+            expected_calls,
+        )
+        self.assertEqual(
+            len(self.mock_exec.call_args_list), len(expected_calls) + len(X)
+        )
+        self.mock_exec.reset_mock()
+
+        """
+        Check model info
+        """
+        ml_model.get_model_info()
+        self.mock_exec.reset_mock()
+
+        """
+        Get values
+        """
+        explanations = ml_model.explain_model()
+        expected_calls = [
+            (f"CALL sys.ML_MODEL_LOAD(@{model_var}, NULL);", None),
+            (
+                f"SELECT model_explanation FROM ML_SCHEMA_root.MODEL_CATALOG WHERE model_handle = @{model_var}",
+                None,
+            ),
+        ]
+        self.check_call(self.mock_exec.call_args_list, expected_calls)
+        self.assertEqual(len(self.mock_exec.call_args_list), len(expected_calls))
+        self.mock_exec.reset_mock()
+
+        predictions = ml_model.predict(X)
+        table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAB"
+        target_table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAC"
+        expected_calls = [
+            (
+                f"CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (feature_0 DOUBLE, feature_1 DOUBLE)",
+                None,
+            ),
+            (f"CALL sys.ML_MODEL_LOAD(@{model_var}, NULL);", None),
+            (
+                f"CALL sys.ML_PREDICT_TABLE('{DEFAULT_SCHEMA}.{table_name}', @{model_var}, '{DEFAULT_SCHEMA}.{target_table_name}', %s)",
+                [None],
+            ),
+            (f"SELECT * FROM {DEFAULT_SCHEMA}.{target_table_name}", None),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{table_name}", None),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{target_table_name}", None),
+        ]
+        self.check_call(
+            [*self.mock_exec.call_args_list[:1], *self.mock_exec.call_args_list[-5:]],
+            expected_calls,
+        )
+        self.assertEqual(
+            len(self.mock_exec.call_args_list), len(expected_calls) + len(X)
+        )
+        self.mock_exec.reset_mock()
+
+        score = ml_model.score(X, y, "balanced_accuracy")
+        table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAE"
+        target_row = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAD"
+        expected_calls = [
+            (
+                f"CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (feature_0 DOUBLE, feature_1 DOUBLE, {target_row} BIGINT)",
+                None,
+            ),
+            (f"CALL sys.ML_MODEL_LOAD(@{model_var}, NULL);", None),
+            (
+                f"CALL sys.ML_SCORE('{DEFAULT_SCHEMA}.{table_name}', '{target_row}', @{model_var}, %s, @{model_var}.score, %s)",
+                ["balanced_accuracy", None],
+            ),
+            (f"SELECT @{model_var}.score", None),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{table_name}", None),
+        ]
+        self.check_call(
+            [*self.mock_exec.call_args_list[:1], *self.mock_exec.call_args_list[-4:]],
+            expected_calls,
+        )
+        self.assertEqual(
+            len(self.mock_exec.call_args_list), len(expected_calls) + len(X)
+        )
+        self.mock_exec.reset_mock()
+
+        pred_explanations = ml_model.explain_predictions(X)
+        table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAF"
+        target_table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAG"
+        expected_calls = [
+            (
+                f"CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (feature_0 DOUBLE, feature_1 DOUBLE)",
+                None,
+            ),
+            (f"CALL sys.ML_MODEL_LOAD(@{model_var}, NULL);", None),
+            (
+                f"CALL sys.ML_EXPLAIN_TABLE('myconnpy.{table_name}', @{model_var}, 'myconnpy.{target_table_name}', CAST(%s as JSON))",
+                ['{"prediction_explainer": "permutation_importance"}'],
+            ),
+            (f"SELECT * FROM {DEFAULT_SCHEMA}.{target_table_name}", None),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{table_name}", None),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{target_table_name}", None),
+        ]
+        self.check_call(
+            [*self.mock_exec.call_args_list[:1], *self.mock_exec.call_args_list[-5:]],
+            expected_calls,
+        )
+        self.assertEqual(
+            len(self.mock_exec.call_args_list), len(expected_calls) + len(X)
+        )
+        self.mock_exec.reset_mock()
+
+        """
+        Check explanations
+        """
+        explanations_cleaned = copy.deepcopy(explanations)
+        explanations_cleaned["permutation_importance"]["feature_0"] = None
+        explanations_cleaned["permutation_importance"]["feature_1"] = None
+        explanations_expected = {
+            "permutation_importance": {"feature_0": None, "feature_1": None}
+        }
+        self.assertEqual(explanations_expected, explanations_cleaned)
+
+        """
+        Check predictions
+        """
+        processed_columns = list(predictions.columns)
+        processed_columns[0] = "ID"
+        col_info = list(zip(processed_columns, predictions.dtypes))
+        expected_col_info = [
+            ("ID", np.dtype("int64")),
+            ("feature_0", np.dtype("float64")),
+            ("feature_1", np.dtype("float64")),
+            ("Prediction", np.dtype("int64")),
+            ("ml_results", np.dtype("O")),
+        ]
+        col_info.sort(), expected_col_info.sort()
+        self.assertEqual(col_info, expected_col_info)
+        self.assertEqual(list(predictions.shape), [y.shape[0], len(expected_col_info)])
+
+        """
+        Check score
+        """
+        self.assertTrue(0.0 <= score <= 1.0)
+
+        """
+        Check pred_explanations
+        """
+        processed_columns = list(pred_explanations.columns)
+        processed_columns[0] = "ID"
+        expected_info = {
+            "ID": np.dtype("int64"),
+            "feature_0": np.dtype("float64"),
+            "feature_1": np.dtype("float64"),
+            "Prediction": np.dtype("int64"),
+            "Notes": np.dtype("O"),
+            "ml_results": np.dtype("O"),
+        }
+        for col_name, col_type in zip(processed_columns, pred_explanations.dtypes):
+            if col_name in expected_info:
+                self.assertEqual(expected_info.pop(col_name), col_type)
+            else:
+                self.assertTrue(
+                    col_name in ["feature_0_attribution", "feature_1_attribution"]
+                )
+        self.assertEqual(expected_info, {})
+        self.assertEqual(list(predictions.shape), [y.shape[0], predictions.shape[1]])
+
+        """
+        Check repeatability
+        """
+        self.assertEqual(explanations, ml_model.explain_model())
+        self.assertTrue(predictions.equals(ml_model.predict(X)))
+        self.assertEqual(score, ml_model.score(X, y, "balanced_accuracy"))
+        self.assertTrue(pred_explanations.equals(ml_model.explain_predictions(X)))
+
+        """
+        Check making new model with same alias
+        """
+        ml_model_copy = MyModel(self.cnx, model_name=model_name)
+
+        self.assertEqual(explanations, ml_model_copy.explain_model())
+        self.assertTrue(predictions.equals(ml_model_copy.predict(X)))
+        self.assertEqual(score, ml_model_copy.score(X, y, "balanced_accuracy"))
+        self.assertTrue(pred_explanations.equals(ml_model_copy.explain_predictions(X)))
+
+        ml_model._delete_model()
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_anomaly(self):
+        """
+        Basic test primarily to check that anomaly detection does not throw any unexpected errors
+        """
+        X, y = self.X, self.y
+
+        ml_model = MyModel(self.cnx, task="anomaly_detection")
+        ml_model._delete_model()
+
+        ml_model.fit(X, None)
+
+        ml_model.explain_model()
+        ml_model.predict(X)
+        ml_model.score(X, y, "balanced_accuracy")
+        with self.assertRaises(DatabaseError):
+            ml_model.explain_predictions(X)
+        ml_model._delete_model()
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_invalid_operation_order(self):
+        """
+        We never train a model, so we should not be able to run downstream tasks
+        """
+        X, y = self.X, self.y
+
+        ml_model = MyModel(self.cnx)
+
+        with self.assertRaises(DatabaseError):
+            ml_model.explain_model()
+        with self.assertRaises(DatabaseError):
+            ml_model.predict(X)
+        with self.assertRaises(DatabaseError):
+            ml_model.score(X, y, "balanced_accuracy")
+        with self.assertRaises(DatabaseError):
+            ml_model.explain_predictions(X)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_invalid_option_key(self):
+        """
+        Check that we properly validate and provide option keys
+
+        NOTE: We do our most robust checks here instead of with valid options
+        as explain_predictions's underlying SQL procedure does not currently
+        support any options that are compatible with mysql-connector-python
+        - 2025-08-08
+        """
+        X, y = self.X, self.y
+
+        fake_options = {"fake_option": 1}
+
+        # "Randomly" assigned name
+        model_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAA"
+        model_var = f"mysql_ai.{model_name}"
+
+        ml_model = MyModel(self.cnx)
+        ml_model._delete_model()
+
+        expected_calls = [
+            ("CALL sys.ML_CREATE_OR_UPGRADE_CATALOG();", None),
+            (
+                f"SELECT * FROM ML_SCHEMA_root.MODEL_CATALOG WHERE model_handle = %s",
+                (model_name,),
+            ),
+            (f"SET @{model_var} = %s;", (model_name,)),
+            (
+                f"DELETE FROM ML_SCHEMA_root.MODEL_CATALOG WHERE model_handle = @{model_var}",
+                None,
+            ),
+        ]
+        # raise Exception(self.mock_exec.call_args_list)
+        self.check_call(self.mock_exec.call_args_list, expected_calls)
+        self.assertEqual(len(self.mock_exec.call_args_list), len(expected_calls))
+        self.mock_exec.reset_mock()
+
+        with self.assertRaises(DatabaseError):
+            ml_model.fit(X, y, options=fake_options)
+        table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAB"
+        target_row = f"target"
+        expected_calls = [
+            (
+                f"CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (feature_0 DOUBLE, feature_1 DOUBLE, {target_row} BIGINT)",
+                None,
+            ),
+            (
+                f"DELETE FROM ML_SCHEMA_root.MODEL_CATALOG WHERE model_handle = @{model_var}",
+                None,
+            ),
+            (
+                f"CALL sys.ML_TRAIN('{DEFAULT_SCHEMA}.{table_name}', '{target_row}', CAST(%s as JSON), @{model_var})",
+                ['{"fake_option": 1, "task": "classification"}'],
+            ),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{table_name}", None),
+        ]
+        self.check_call(
+            [*self.mock_exec.call_args_list[:1], *self.mock_exec.call_args_list[-3:]],
+            expected_calls,
+        )
+        self.assertEqual(
+            len(self.mock_exec.call_args_list), len(expected_calls) + len(X)
+        )
+        self.mock_exec.reset_mock()
+
+        ml_model.fit(X, y)
+        table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAC"
+        target_row = f"target"
+        expected_calls = [
+            (
+                f"CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (feature_0 DOUBLE, feature_1 DOUBLE, {target_row} BIGINT)",
+                None,
+            ),
+            (
+                f"DELETE FROM ML_SCHEMA_root.MODEL_CATALOG WHERE model_handle = @{model_var}",
+                None,
+            ),
+            (
+                f"CALL sys.ML_TRAIN('{DEFAULT_SCHEMA}.{table_name}', '{target_row}', CAST(%s as JSON), @{model_var})",
+                ['{"task": "classification"}'],
+            ),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{table_name}", None),
+        ]
+        self.check_call(
+            [*self.mock_exec.call_args_list[:1], *self.mock_exec.call_args_list[-3:]],
+            expected_calls,
+        )
+        self.assertEqual(
+            len(self.mock_exec.call_args_list), len(expected_calls) + len(X)
+        )
+        self.mock_exec.reset_mock()
+
+        with self.assertRaises(DatabaseError):
+            ml_model.predict(X, options=fake_options)
+        table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAD"
+        target_table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAE"
+        expected_calls = [
+            (
+                f"CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (feature_0 DOUBLE, feature_1 DOUBLE)",
+                None,
+            ),
+            (f"CALL sys.ML_MODEL_LOAD(@{model_var}, NULL);", None),
+            (
+                f"CALL sys.ML_PREDICT_TABLE('{DEFAULT_SCHEMA}.{table_name}', @{model_var}, '{DEFAULT_SCHEMA}.{target_table_name}', CAST(%s as JSON))",
+                ['{"fake_option": 1}'],
+            ),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{table_name}", None),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{target_table_name}", None),
+        ]
+        self.check_call(
+            [*self.mock_exec.call_args_list[:1], *self.mock_exec.call_args_list[-4:]],
+            expected_calls,
+        )
+        self.assertEqual(
+            len(self.mock_exec.call_args_list), len(expected_calls) + len(X)
+        )
+        self.mock_exec.reset_mock()
+
+        with self.assertRaises(DatabaseError):
+            ml_model.score(X, y, "balanced_accuracy", options=fake_options)
+        table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAG"
+        target_row = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAF"
+        expected_calls = [
+            (
+                f"CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (feature_0 DOUBLE, feature_1 DOUBLE, {target_row} BIGINT)",
+                None,
+            ),
+            (f"CALL sys.ML_MODEL_LOAD(@{model_var}, NULL);", None),
+            (
+                f"CALL sys.ML_SCORE('{DEFAULT_SCHEMA}.{table_name}', '{target_row}', @{model_var}, %s, @{model_var}.score, CAST(%s as JSON))",
+                ["balanced_accuracy", '{"fake_option": 1}'],
+            ),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{table_name}", None),
+        ]
+        self.check_call(
+            [*self.mock_exec.call_args_list[:1], *self.mock_exec.call_args_list[-3:]],
+            expected_calls,
+        )
+        self.assertEqual(
+            len(self.mock_exec.call_args_list), len(expected_calls) + len(X)
+        )
+        self.mock_exec.reset_mock()
+
+        with self.assertRaises(DatabaseError):
+            ml_model.explain_predictions(X, options=fake_options)
+        table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAH"
+        target_table_name = f"{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_AAAAAAAAAAAAAAAI"
+        expected_calls = [
+            (
+                f"CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (feature_0 DOUBLE, feature_1 DOUBLE)",
+                None,
+            ),
+            (f"CALL sys.ML_MODEL_LOAD(@{model_var}, NULL);", None),
+            (
+                f"CALL sys.ML_EXPLAIN_TABLE('myconnpy.{table_name}', @{model_var}, 'myconnpy.{target_table_name}', CAST(%s as JSON))",
+                ['{"fake_option": 1}'],
+            ),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{table_name}", None),
+            (f"DROP TABLE IF EXISTS {DEFAULT_SCHEMA}.{target_table_name}", None),
+        ]
+        self.check_call(
+            [*self.mock_exec.call_args_list[:1], *self.mock_exec.call_args_list[-4:]],
+            expected_calls,
+        )
+        self.assertEqual(
+            len(self.mock_exec.call_args_list), len(expected_calls) + len(X)
+        )
+        self.mock_exec.reset_mock()
+
+        ml_model._delete_model()
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_valid_option_key(self):
+        """
+        Check that we properly forward along options. We can do this by checking that invalid values throw errors and valid values work without issue.
+        """
+        X, y = self.X, self.y
+
+        ml_model = MyModel(self.cnx, task="anomaly_detection")
+
+        with self.assertRaises(DatabaseError):
+            ml_model.fit(X, None, options={"exclude_column_list": ["ids"]})
+        ml_model.fit(X, None, options={"exclude_column_list": ["feature_0"]})
+
+        with self.assertRaises(DatabaseError):
+            ml_model.predict(X, options={"threshold": -1.0})
+        ml_model.predict(X, options={"threshold": 0.0})
+
+        with self.assertRaises(DatabaseError):
+            ml_model.score(X, y, "precision_at_k", options={"topk": -1})
+        ml_model.score(X, y, "precision_at_k", options={"topk": 10})
+
+        ml_model._delete_model()
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_forecasting(self):
+        data = {
+            "C0": [
+                2016,
+                2017,
+                2018,
+                2019,
+                2020,
+                2021,
+                2022,
+                2023,
+                2024,
+                2025,
+                2026,
+                2027,
+                2028,
+                2029,
+                2030,
+                2031,
+                2032,
+                2033,
+            ],
+            "C1": [
+                5141280,
+                4169320,
+                -6117510,
+                4240520,
+                -765548,
+                -2419130,
+                6113810,
+                2843360,
+                -3605160,
+                5526540,
+                2457080,
+                1680460,
+                3544160,
+                -3083790,
+                -7132180,
+                2919490,
+                7507210,
+                -4632270,
+            ],
+            "C2": [
+                -2005884417,
+                -2016618842,
+                466787207,
+                -146322759,
+                -1937283532,
+                -1223832992,
+                -664275221,
+                -2144935961,
+                -227541896,
+                1222380629,
+                1360642676,
+                -3850890,
+                737213162,
+                -2114547172,
+                -2113917636,
+                -325129819,
+                -1579914004,
+                -1782430355,
+            ],
+            "C3": [
+                -95648400000000,
+                5197890000000,
+                9637310000000,
+                -58668400000000,
+                17690700000000,
+                -5368850000000,
+                13145700000000,
+                121560000000000,
+                -79559000000000,
+                -74323200000000,
+                136942000000000,
+                -86288600000000,
+                30627000000000,
+                14566100000000,
+                76392300000000,
+                -46361100000000,
+                37199300000000,
+                -73774600000000,
+            ],
+        }
+
+        df = pd.DataFrame(data)
+
+        y = df["C1"].copy()
+        X = df.drop(columns=["C1"])
+        X["C0"] = pd.to_datetime(X["C0"].astype(str) + "-01-01")
+
+        # Add datetime column
+        self.X["ddate"] = pd.date_range(
+            start="2022-01-01", periods=NUM_ROWS, freq="D"
+        ).astype("datetime64[ns]")
+
+        task = "forecasting"
+        ml_model = MyModel(self.cnx, task=task)
+
+        ml_model.fit(
+            X, y, options={"datetime_index": "C0", "endogenous_variables": ["C1"]}
+        )
+
+        ml_model.predict(X)
+
+        ml_model._delete_model()
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_log_anomaly_detection(self):
+        sample_sentences = [
+            "The quick brown fox jumps over the lazy dog.",
+            "Data science is transforming business decisions.",
+            "Cloud computing offers on-demand scalability.",
+            "Machine learning models require quality data.",
+            "Python is a popular language for analytics.",
+            "Natural language processing enables chatbots.",
+            "Security and compliance are top enterprise concerns.",
+            "Visualization helps make complex data accessible.",
+            "Continuous integration improves software delivery.",
+            "Customer experience is key to business success.",
+        ]
+
+        X = pd.DataFrame(
+            {
+                "id": range(1, len(sample_sentences) + 1),  # auto-increment from 1
+                "log": sample_sentences,
+            }
+        )
+
+        task = "log_anomaly_detection"
+
+        ml_model = MyModel(self.cnx, task=task)
+
+        ml_model.fit(X, None, options={"exclude_column_list": ["id"]})
+
+        ml_model.predict(X)
+
+        ml_model._delete_model()
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_anomaly_detection(self):
+        X = self.X
+
+        task = "anomaly_detection"
+
+        ml_model = MyModel(self.cnx, task=task)
+
+        ml_model.fit(X, None)
+
+        ml_model.predict(X)
+
+        ml_model._delete_model()
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_recommendation(self):
+        X = pd.DataFrame(
+            {
+                "C0": ["AAAA", "B", "C", "D", "EEE", "ABC", "CEG", "DE", "AB", "BC"],
+                "C1": ["tv"] * 10,
+                "C2": [
+                    "test",
+                    "random",
+                    "tea",
+                    "coffee",
+                    "test1",
+                    "random1",
+                    "tea2",
+                    "coffee2",
+                    "test3",
+                    "random3",
+                ],
+                "C3": [10, -10, 0, 4, 5, -5, 0, 4, 10, -10],
+                "C4": ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"],
+                "C5": [0, 1, 2, 4, 2, 1, 3, 4.2, 2.1, 3],
+                "C6": pd.to_datetime(
+                    [
+                        f"{year}-01-01"
+                        for year in [
+                            2018,
+                            2019,
+                            2017,
+                            2016,
+                            2015,
+                            2014,
+                            2013,
+                            2012,
+                            2022,
+                            2023,
+                        ]
+                    ]
+                ),
+            }
+        )
+
+        # Target DataFrame (y)
+        y = pd.DataFrame({"target": [0, 3, 1, 2, 5, 4, 1, 2, 4, 0]})
+
+        task = "recommendation"
+        ml_model = MyModel(self.cnx, task=task)
+
+        ml_model.fit(X, y, options={"users": "C1", "items": "C2"})
+
+        ml_model.predict(X)
+
+        ml_model._delete_model()
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_topic_modeling(self):
+        sample_sentences = [
+            "The quick brown fox jumps over the lazy dog.",
+            "Data science is transforming business decisions.",
+            "Cloud computing offers on-demand scalability.",
+            "Machine learning models require quality data.",
+            "Python is a popular language for analytics.",
+            "Natural language processing enables chatbots.",
+            "Security and compliance are top enterprise concerns.",
+            "Visualization helps make complex data accessible.",
+            "Continuous integration improves software delivery.",
+            "Customer experience is key to business success.",
+        ]
+
+        X = pd.DataFrame(
+            {
+                "target": list(range(len(sample_sentences))),
+                "text_feature": sample_sentences,
+            }
+        )
+
+        task = "topic_modeling"
+        ml_model = MyModel(self.cnx, task=task)
+
+        ml_model.fit(X, None, options={"document_column": "text_feature"})
+
+        ml_model.predict(X)
+
+        ml_model._delete_model()
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_standard_tasks(self):
+        X, y = self.X, self.y
+
+        standard_tasks = [
+            "classification",
+            "regression",
+        ]
+        for task in standard_tasks:
+            ml_model = MyModel(self.cnx, task=task)
+
+            ml_model.fit(X, y)
+
+            ml_model.predict(X)
+
+            ml_model._delete_model()
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/ml/test_outlier.py 9.5.0-1/mysql-connector-python/tests/ai/ml/test_outlier.py
--- 9.4.0-1/mysql-connector-python/tests/ai/ml/test_outlier.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/ml/test_outlier.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,287 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import unittest
+
+from unittest.mock import MagicMock, patch
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import AI_SKIP_MESSAGE, DEFAULT_CONNECTION_TIMEOUT
+from tests.ai.utilities import MyAITest
+
+from mysql.connector.errors import DatabaseError
+
+if tests.MYSQL_ML_ENABLED:
+    import numpy as np
+    import pandas as pd
+
+    from mysql.ai.ml.outlier import EPS, MyAnomalyDetector
+    from sklearn.pipeline import Pipeline
+    from sklearn.preprocessing import StandardScaler
+
+    ELEMS_PER_CLASS = 5
+    NUM_FEAT = 3
+    NUM_ROWS = ELEMS_PER_CLASS * 2
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestMyAnomalyDetector(MyAITest):
+    def setUp(self):
+        super().setUp()
+        self.X = pd.DataFrame(
+            np.random.randn(NUM_ROWS, NUM_FEAT),
+            columns=[f"feature_{i}" for i in range(NUM_FEAT)],
+        )
+
+    def _make_mock_detector(self, threshold=0.8):
+        """
+        Helper: construct MyAnomalyDetector with MyBaseMLModel.__init__ patched as a no-op (for pure unit test).
+        """
+        # Creates an anomaly detector with all real database functionality mocked out, usable for pure prediction/unit testing.
+        with patch("mysql.ai.ml.base.MyBaseMLModel.__init__", return_value=None):
+            det = MyAnomalyDetector(MagicMock())
+            det._model = MagicMock()
+            # Mock catalog model info to provide threshold used by decision_function
+            if threshold is not None:
+                det.get_model_info = MagicMock(
+                    return_value={
+                        "model_metadata": {
+                            "training_params": {
+                                "anomaly_detection_threshold": threshold
+                            }
+                        }
+                    }
+                )
+            else:
+                # Simulate missing threshold in trained model metadata
+                det.get_model_info = MagicMock(
+                    return_value={
+                        "model_metadata": {
+                            "training_params": {
+                                # intentionally empty
+                            }
+                        }
+                    }
+                )
+        return det
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    @unittest.skip("Test will fail until MySQL 9.5.0 release")
+    def test_pipeline_and_output_shapes(self):
+        """
+        Test MyAnomalyDetector as head in sklearn Pipeline, with preprocessor, strict output shape and value checks.
+        """
+        detector = MyAnomalyDetector(self.cnx)
+        pipe = Pipeline([("scaler", StandardScaler()), ("anomaly", detector)])
+        pipe.fit(self.X)  # Outlier detection is typically unsupervised
+
+        preds = pipe.predict(self.X)
+        self.assertEqual(preds.ndim, 1)
+        self.assertEqual(preds.shape, (len(self.X),))
+        self.assertTrue(np.isin(preds, [-1, 1]).all())
+        self.assertTrue(np.isfinite(preds).all())
+
+        decision = pipe.named_steps["anomaly"].decision_function(self.X)
+        self.assertEqual(decision.ndim, 1)
+        self.assertEqual(decision.shape, (len(self.X),))
+        self.assertTrue(np.isfinite(decision).all())
+
+        scores = pipe.named_steps["anomaly"].score_samples(self.X)
+        self.assertEqual(scores.ndim, 1)
+        self.assertEqual(scores.shape, (len(self.X),))
+        self.assertTrue(np.isfinite(scores).all())
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_invalid_options_raise(self):
+        """
+        Test DatabaseError is raised if invalid options are provided via constructor to fit_extra_options,
+        score_extra_options for their respective operations.
+        """
+        # Constructor no longer accepts outlier_threshold; validation moved to trained model metadata.
+
+        # Invalid fit options
+        det_fit_invalid = MyAnomalyDetector(
+            self.cnx, fit_extra_options={"invalid_option": True}
+        )
+        with self.assertRaises(DatabaseError):
+            det_fit_invalid.fit(self.X)
+
+        # Invalid score options (used for score_samples/decision_function)
+        det_score_invalid = MyAnomalyDetector(
+            self.cnx, score_extra_options={"invalid_option": True}
+        )
+        det_score_invalid.fit(self.X)
+        with self.assertRaises(DatabaseError):
+            det_score_invalid.predict(self.X)
+        with self.assertRaises(DatabaseError):
+            det_score_invalid.decision_function(self.X)
+        with self.assertRaises(DatabaseError):
+            det_score_invalid.score_samples(self.X)
+
+    def test_missing_threshold_raises_value_error(self):
+        """Unit test: missing anomaly_detection_threshold in model info raises ValueError in decision_function."""
+        X = pd.DataFrame(np.zeros((1, 1)))
+        det = self._make_mock_detector(threshold=None)
+        det._model.predict.return_value = {
+            "ml_results": pd.Series([{"probabilities": {"normal": 0.5}}])
+        }
+        with self.assertRaises(ValueError):
+            det.decision_function(X)
+
+    def test_missing_model_info_raises_value_error(self):
+        """Unit test: missing model catalog info raises ValueError in decision_function."""
+        X = pd.DataFrame(np.zeros((1, 1)))
+        det = self._make_mock_detector()
+        # Force model catalog to return None to simulate non-existent model
+        det.get_model_info = MagicMock(return_value=None)
+        det._model.predict.return_value = {
+            "ml_results": pd.Series([{"probabilities": {"normal": 0.5}}])
+        }
+        with self.assertRaises(ValueError):
+            det.decision_function(X)
+
+    def test_predict_logic_with_mock(self):
+        """Unit test: verify label logic for various predicted probabilities using a mocked backend."""
+        # This is a pure logic test: threshold and probability boundary checking—all predictions are fully mocked.
+        X = pd.DataFrame(np.zeros((3, 2)))
+
+        # Set up detector so that threshold = 0.9, so boundary = logits(0.1)
+        det = self._make_mock_detector(threshold=0.9)
+        # Prepare p = 0.05 (high anomaly), p = 0.5, p = 0.99 (not anomaly)
+        backend_probs = np.array([0.05, 0.5, 0.99])
+        # Properly mock the modern ml_results return format
+        det._model.predict.return_value = {
+            "ml_results": pd.Series(
+                [{"probabilities": {"normal": p}} for p in backend_probs]
+            )
+        }
+
+        pred = det.predict(X)
+        np.testing.assert_array_equal(pred, [-1, 1, 1])
+
+    def test_score_samples_shape_and_values(self):
+        """Unit test: verify score_samples shape and value mapping using a mock backend."""
+        # This test only verifies the mathematical mapping from probabilities to scores, not any DB code.
+        X = pd.DataFrame(np.ones((2, 3)))
+        det = self._make_mock_detector()
+        det._model.predict.return_value = {
+            "ml_results": pd.Series(
+                [
+                    {"probabilities": {"normal": 0.75}},
+                    {"probabilities": {"normal": 0.25}},
+                ]
+            )
+        }
+        scores = det.score_samples(X)
+        np.testing.assert_allclose(scores, [1.0986, -1.0986], rtol=1e-3)
+
+    def test_decision_function_consistency(self):
+        """Unit test: decision_function output is score_samples - boundary."""
+        X = pd.DataFrame(np.zeros((1, 4)))
+        det = self._make_mock_detector(threshold=0.7)
+        det._model.predict.return_value = {
+            "ml_results": pd.Series([{"probabilities": {"normal": 0.7}}])
+        }
+        scores = det.score_samples(X)
+        decision = det.decision_function(X)
+        boundary = det.boundary
+        np.testing.assert_allclose(scores - boundary, decision, rtol=1e-10)
+
+    def test_predict_handles_vectorized_and_scalar(self):
+        """Unit test: predict works for scalar and vectorized outputs."""
+        X = pd.DataFrame(np.zeros((2, 1)))
+        det = self._make_mock_detector()
+        det._model.predict.return_value = {
+            "ml_results": pd.Series(
+                [
+                    {"probabilities": {"normal": 0.4}},
+                    {"probabilities": {"normal": 0.2}},
+                ]
+            )
+        }
+        preds = det.predict(X)
+        self.assertEqual(preds.shape, (2,))
+
+    def test_score_samples_clips_extreme_probabilities(self):
+        X = pd.DataFrame(np.zeros((2, 1)))
+        det = self._make_mock_detector()
+        det._model.predict.return_value = {
+            "ml_results": pd.Series(
+                [
+                    {"probabilities": {"normal": 0.0}},
+                    {"probabilities": {"normal": 1.0}},
+                ]
+            )
+        }
+        scores = det.score_samples(X)
+        expected = np.array([np.log(EPS / (1.0 - EPS)), np.log((1.0 - EPS) / EPS)])
+        np.testing.assert_allclose(scores, expected, rtol=1e-6, atol=1e-12)
+        self.assertTrue(np.isfinite(scores).all())
+
+    def test_decision_function_uses_cached_boundary(self):
+        X = pd.DataFrame(np.zeros((2, 2)))
+        det = self._make_mock_detector(threshold=0.6)
+        # First call establishes boundary via get_model_info
+        det._model.predict.return_value = {
+            "ml_results": pd.Series(
+                [
+                    {"probabilities": {"normal": 0.6}},
+                    {"probabilities": {"normal": 0.6}},
+                ]
+            )
+        }
+        _ = det.decision_function(X)
+        old_boundary = det.boundary
+        # Ensure no additional catalog access when boundary already cached
+        det.get_model_info.reset_mock()
+        # Second call with different scores should reuse cached boundary
+        det._model.predict.return_value = {
+            "ml_results": pd.Series(
+                [
+                    {"probabilities": {"normal": 0.4}},
+                    {"probabilities": {"normal": 0.8}},
+                ]
+            )
+        }
+        _ = det.decision_function(X)
+        self.assertEqual(det.get_model_info.call_count, 0)
+        self.assertEqual(det.boundary, old_boundary)
+
+    def test_predict_tie_at_boundary_is_inlier(self):
+        """If decision_function equals 0, predict should return +1 (inlier)."""
+        X = pd.DataFrame(np.zeros((1, 1)))
+        # threshold = 0.6 -> boundary uses logits(1 - 0.6) = logits(0.4)
+        det = self._make_mock_detector(threshold=0.6)
+        # Provide normal prob exactly equal to 0.4 so score_samples equals boundary
+        det._model.predict.return_value = {
+            "ml_results": pd.Series([{"probabilities": {"normal": 0.4}}])
+        }
+        pred = det.predict(X)
+        np.testing.assert_array_equal(pred, [1])
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/ml/test_regressor.py 9.5.0-1/mysql-connector-python/tests/ai/ml/test_regressor.py
--- 9.4.0-1/mysql-connector-python/tests/ai/ml/test_regressor.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/ml/test_regressor.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,106 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import unittest
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import AI_SKIP_MESSAGE, DEFAULT_CONNECTION_TIMEOUT
+from tests.ai.utilities import MyAITest
+
+from mysql.connector.errors import DatabaseError
+
+if tests.MYSQL_ML_ENABLED:
+    import numpy as np
+    import pandas as pd
+
+    from mysql.ai.ml.regressor import MyRegressor
+    from sklearn.pipeline import Pipeline
+    from sklearn.preprocessing import StandardScaler
+
+    ELEMS_PER_CLASS = 5
+    NUM_FEAT = 3
+    NUM_TARGETS = 1
+    NUM_ROWS = ELEMS_PER_CLASS * 2
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestMyRegressor(MyAITest):
+    def setUp(self):
+        super().setUp()
+        self.X = pd.DataFrame(
+            np.random.randn(NUM_ROWS, NUM_FEAT),
+            columns=[f"feature_{i}" for i in range(NUM_FEAT)],
+        )
+        self.y = pd.Series(np.random.randn(NUM_ROWS), name="target")
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_pipeline_and_output_shapes(self):
+        """
+        Test MyRegressor as head in sklearn Pipeline, with preprocessor, and strict output shape and type checks.
+        """
+        clf = MyRegressor(self.cnx)
+        pipe = Pipeline([("scaler", StandardScaler()), ("mysql_reg", clf)])
+        pipe.fit(self.X, self.y)
+        preds = pipe.predict(self.X)
+        # 1D, shape (N,), all finite, real-valued
+        self.assertEqual(preds.ndim, 1)
+        self.assertEqual(preds.shape, (len(self.X),))
+        self.assertTrue(np.issubdtype(preds.dtype, np.floating))
+        self.assertTrue(np.isfinite(preds).all())
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_invalid_options_raise(self):
+        """
+        Test DatabaseError is raised if invalid options are provided via constructor to fit_extra_options,
+        predict_extra_options, or explain_extra_options for their respective operations.
+        """
+        # Invalid fit options
+        regr_fit_invalid = MyRegressor(
+            self.cnx, fit_extra_options={"invalid_option": True}
+        )
+        with self.assertRaises(DatabaseError):
+            regr_fit_invalid.fit(self.X, self.y)
+
+        # Invalid predict options
+        regr_predict_invalid = MyRegressor(
+            self.cnx, predict_extra_options={"invalid_option": True}
+        )
+        regr_predict_invalid.fit(self.X, self.y)
+        with self.assertRaises(DatabaseError):
+            regr_predict_invalid.predict(self.X)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_explain_predictions_with_fake_options(self):
+        """Test explain with fake explain_extra_options, should raise DatabaseError."""
+        # Intentionally pass invalid explain_extra_options to confirm error handling.
+        model = MyRegressor(self.cnx, explain_extra_options={"fake_option": 123})
+        model.fit(self.X, self.y)
+        with self.assertRaises(DatabaseError):
+            model.explain_predictions(self.X)
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/ml/test_transformer.py 9.5.0-1/mysql-connector-python/tests/ai/ml/test_transformer.py
--- 9.4.0-1/mysql-connector-python/tests/ai/ml/test_transformer.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/ml/test_transformer.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,113 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import unittest
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import AI_SKIP_MESSAGE, DEFAULT_CONNECTION_TIMEOUT
+from tests.ai.utilities import MyAITest
+
+from mysql.connector.errors import DatabaseError
+
+if tests.MYSQL_ML_ENABLED:
+    import numpy as np
+    import pandas as pd
+
+    from mysql.ai.ml.transformer import MyGenericTransformer
+    from sklearn.pipeline import Pipeline
+    from sklearn.preprocessing import StandardScaler
+
+    ELEMS_PER_CLASS = 5
+    NUM_FEAT = 3
+    NUM_CLASSES = 2
+    NUM_ROWS = NUM_CLASSES * ELEMS_PER_CLASS
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestMyGenericTransformer(MyAITest):
+    def setUp(self):
+        super().setUp()
+        self.X = pd.DataFrame(
+            np.random.randn(NUM_ROWS, NUM_FEAT),
+            columns=[f"feature_{i}" for i in range(NUM_FEAT)],
+        )
+        self.y = pd.Series(
+            [i for _ in range(ELEMS_PER_CLASS) for i in range(NUM_CLASSES)],
+            name="target",
+        )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_pipeline_fit_transform_and_score(self):
+        """Test transformer in pipeline and score method."""
+        transformer = MyGenericTransformer(self.cnx)
+        pipe = Pipeline(
+            [("scaler", StandardScaler()), ("mysql_transform", transformer)]
+        )
+        pipe.fit(self.X, self.y)
+        Xt = pipe.transform(self.X)
+        self.assertTrue(hasattr(Xt, "shape"))
+        self.assertEqual(Xt.shape[0], self.X.shape[0])
+
+        expected_columns = [
+            "feature_0",
+            "feature_1",
+            "feature_2",
+            "Prediction",
+            "ml_results",
+        ]
+        self.assertTrue(all([col_name in Xt.columns for col_name in expected_columns]))
+        self.assertEqual(Xt.shape[1], len(expected_columns) + 1)
+
+        # Score
+        result = pipe.named_steps["mysql_transform"].score(self.X, self.y)
+        self.assertTrue(0.0 <= result <= 1.0)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_invalid_options_raise(self):
+        """Test invalid options for fit, transform, explain, and score each raise DatabaseError."""
+        # Fit
+        transformer_fit_invalid = MyGenericTransformer(
+            self.cnx, fit_extra_options={"bad_option": 42}
+        )
+        with self.assertRaises(DatabaseError):
+            transformer_fit_invalid.fit(self.X, self.y)
+
+        # Transform
+        transformer_invalid_options = MyGenericTransformer(
+            self.cnx,
+            transform_extra_options={"bad_option": 43},
+            score_extra_options={"bad_option": 45},
+        )
+        transformer_invalid_options.fit(self.X, self.y)
+        with self.assertRaises(DatabaseError):
+            transformer_invalid_options.transform(self.X)
+        # Score
+        with self.assertRaises(DatabaseError):
+            transformer_invalid_options.score(self.X, self.y)
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/utilities.py 9.5.0-1/mysql-connector-python/tests/ai/utilities.py
--- 9.4.0-1/mysql-connector-python/tests/ai/utilities.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/utilities.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,222 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import re
+import string
+import unittest
+
+from itertools import product
+from typing import Generator
+from unittest.mock import _patch, patch
+
+import tests
+
+from tests.ai.constants import AI_SKIP_MESSAGE, MYSQL_CONNECTOR_RANDOM_NAME_SPACE
+
+import mysql.connector
+
+from mysql.connector.abstracts import MySQLCursorAbstract
+
+
+def _lexicographic_names(length: int = 16) -> Generator[str, None, None]:
+    """
+    Generate lexicographically ordered uppercase names.
+
+    Args:
+        length: The length of each generated name. Default is 16.
+
+    Yields:
+        str: The next name in lexicographic sequence, using uppercase A-Z characters.
+
+    Notes:
+        Names are generated as all possible combinations of uppercase ASCII letters of the given length,
+        starting from 'A' * length (e.g., 'TEST_MYSQL_CONNECTOR_AAAA...A', 'TEST_MYSQL_CONNECTOR_AAAA...B')
+        and incrementing lexicographically. This is useful for deterministic and exhaustive name generation
+        for testing or mocking scenarios.
+    """
+    chars = string.ascii_uppercase
+    for name_tuple in product(chars, repeat=length):
+        yield f"""{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_{"".join(name_tuple)}"""
+
+
+def random_name_patcher() -> _patch:
+    """
+    Create a patch for the mysql.ai.utils._get_name function to return lexicographically generated names.
+
+    Returns:
+        unittest.mock._patch: A patch object that replaces mysql.ai.utils._get_name,
+        yielding deterministic lexicographic names on each invocation.
+
+    Notes:
+        The patch uses the _lexicographic_names generator to ensure names are produced in deterministic order, rather than randomly.
+        Useful for testing scenarios where reproducible name generation is required.
+    """
+    name_gen = _lexicographic_names()
+    return patch("mysql.ai.utils.utils._get_name", side_effect=lambda: next(name_gen))
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class MyAITest(tests.MySQLConnectorTests):
+
+    @staticmethod
+    def _safe_uninstall(cursor: MySQLCursorAbstract, uninstall_sql: str):
+        """
+        Attempts to uninstall a component or plugin, suppressing errors
+        if it is already uninstalled/not present.
+        """
+        try:
+            cursor.execute(uninstall_sql)
+            cursor.fetchall()
+        except mysql.connector.Error as e:
+            # Suppress errors for things that are already uninstalled/not present
+            error_codes = [
+                3530,  # not installed
+                3537,  # not loaded
+                1125,  # unknown plugin
+            ]
+            if e.errno not in error_codes:
+                raise
+
+    @staticmethod
+    def _safe_install(cursor: MySQLCursorAbstract, install_sql: str):
+        """
+        Attempts to install a component or plugin, suppressing errors
+        if it is already installed.
+        """
+        try:
+            cursor.execute(install_sql)
+            cursor.fetchall()
+        except mysql.connector.Error as e:
+            # Suppress errors for things that are already installed
+            error_codes = [
+                3531,  # ER_COMPONENT_EXISTS
+                1126,  # ER_PLUGIN_IS_BUSY
+            ]
+            if e.errno not in error_codes:
+                raise
+
+    @staticmethod
+    def uninstall_ai_dependencies():
+        # Install AI dependencies
+        with (
+            mysql.connector.connect(**tests.get_mysql_config()) as cnx,
+            cnx.cursor() as cursor,
+        ):
+
+            stmts = [
+                "UNINSTALL COMPONENT 'file://component_vector';",
+                "UNINSTALL COMPONENT 'file://component_vector_store_load';",
+            ]
+            for stmt in stmts:
+                MyAITest._safe_uninstall(cursor, stmt)
+
+    @staticmethod
+    def install_ai_dependencies():
+        with (
+            mysql.connector.connect(**tests.get_mysql_config()) as cnx,
+            cnx.cursor() as cursor,
+        ):
+
+            stmts = [
+                "INSTALL COMPONENT 'file://component_vector_store_load';",
+                "GRANT VECTOR_STORE_LOAD_EXEC on *.* to current_user();",
+                "SELECT mysql_task_management_ensure_schema();",
+                "INSTALL COMPONENT 'file://component_vector';",
+            ]
+            for stmt in stmts:
+                MyAITest._safe_install(cursor, stmt)
+
+    def _drop_test_tables(cursor: MySQLCursorAbstract):
+        cursor.execute(f"SHOW TABLES LIKE '{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_%'")
+        test_tables = cursor.fetchall()
+
+        for (table_name,) in test_tables:
+            cursor.execute(f"DROP TABLE IF EXISTS {table_name}")
+
+    def _clear_random_models(cursor: MySQLCursorAbstract):
+        cursor.execute("SELECT CURRENT_USER()")
+        current_user = cursor.fetchone()[0].split("@")[0]
+
+        if not re.match(r"^\w+$", current_user):
+            raise ValueError(f"Unsafe DB user for schema: {current_user}")
+
+        schema, name = f"ML_SCHEMA_{current_user}", "MODEL_CATALOG"
+        cursor.execute(
+            """
+            SELECT TABLE_NAME
+            FROM INFORMATION_SCHEMA.TABLES
+            WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s
+            """,
+            (schema, name),
+        )
+        if cursor.fetchone() is None:
+            return
+
+        qualified_model_catalog = f"{schema}.{name}"
+
+        cursor.execute(
+            f"SELECT `model_handle` FROM {qualified_model_catalog} WHERE `model_handle` LIKE '{MYSQL_CONNECTOR_RANDOM_NAME_SPACE}_%'"
+        )
+        model_handles = cursor.fetchall()
+
+        for (model_handle,) in model_handles:
+            cursor.execute(
+                f"DELETE FROM {qualified_model_catalog} WHERE `model_handle` = %s",
+                (model_handle,),
+            )
+
+    def setUp(self):
+        super().setUp()
+        with (
+            mysql.connector.connect(**tests.get_mysql_config()) as cnx,
+            cnx.cursor() as cursor,
+        ):
+            MyAITest._drop_test_tables(cursor)
+            MyAITest._clear_random_models(cursor)
+            cnx.commit()
+
+    def tearDown(self):
+        with (
+            mysql.connector.connect(**tests.get_mysql_config()) as cnx,
+            cnx.cursor() as cursor,
+        ):
+            MyAITest._drop_test_tables(cursor)
+            MyAITest._clear_random_models(cursor)
+            cnx.commit()
+        super().tearDown()
+
+    @classmethod
+    def setUpClass(cls):
+        MyAITest.uninstall_ai_dependencies()
+        MyAITest.install_ai_dependencies()
+        super().setUpClass()
+
+    @classmethod
+    def tearDownClass(cls):
+        super().tearDownClass()
+        MyAITest.uninstall_ai_dependencies()
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/utils/__init__.py 9.5.0-1/mysql-connector-python/tests/ai/utils/__init__.py
--- 9.4.0-1/mysql-connector-python/tests/ai/utils/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/utils/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/utils/test_atomic_cursor.py 9.5.0-1/mysql-connector-python/tests/ai/utils/test_atomic_cursor.py
--- 9.4.0-1/mysql-connector-python/tests/ai/utils/test_atomic_cursor.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/utils/test_atomic_cursor.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,82 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# See the file COPYING for license information.
+
+import unittest
+
+from unittest.mock import MagicMock
+
+import tests
+
+from tests.ai.constants import AI_SKIP_MESSAGE
+
+if tests.MYSQL_ML_ENABLED:
+    from mysql.ai.utils import atomic_transaction
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestAtomicCursor(unittest.TestCase):
+    @classmethod
+    def setUp(self):
+        self.conn = MagicMock()
+        self.cursor = MagicMock()
+        self.conn.cursor.return_value = self.cursor
+
+    def test_normal_exit_closes_cursor_no_rollback(self):
+        with atomic_transaction(self.conn) as cursor:
+            cursor.execute("SELECT 1")
+        self.conn.rollback.assert_not_called()
+        self.cursor.close.assert_called_once()
+
+    def test_exception_triggers_rollback_and_closes_cursor(self):
+        class MyException(Exception):
+            pass
+
+        with self.assertRaises(MyException):
+            with atomic_transaction(self.conn):
+                raise MyException("fail here")
+        self.conn.rollback.assert_called_once()
+        self.cursor.close.assert_called_once()
+
+    def test_rollback_raises_inner_exception_is_swallowed(self):
+        # If rollback itself raises, the context exception is still propagated, not masked.
+        self.conn.rollback.side_effect = RuntimeError("fail rollback")
+
+        class MyException(Exception):
+            pass
+
+        with self.assertRaises(MyException):
+            with atomic_transaction(self.conn):
+                raise MyException("fail ctx")
+        self.conn.rollback.assert_called_once()
+        self.cursor.close.assert_called_once()
+
+    def test_both_rollback_and_close_raise__donot_mask_exit_exception(self):
+        # Both rollback and close raise exceptions: test that the exception
+        # from inside the context is still the one propagated.
+        self.conn.rollback.side_effect = RuntimeError("fail rollback")
+        self.cursor.close.side_effect = RuntimeError("fail close")
+
+        class MyException(Exception):
+            pass
+
+        with self.assertRaises(MyException):
+            with atomic_transaction(self.conn):
+                raise MyException("fail both")
+        self.conn.rollback.assert_called_once()
+        self.cursor.close.assert_called_once()
+
+    def test_close_cursor_raises_exception_raises(self):
+        # test that an exception is raised if close() fails and there was no
+        # exception raised in the context.
+        self.cursor.close.side_effect = RuntimeError("fail close")
+
+        with self.assertRaises(RuntimeError):
+            with atomic_transaction(self.conn) as cursor:
+                cursor.execute("SELECT 1")
+        self.conn.rollback.assert_not_called()
+        self.cursor.close.assert_called_once()
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/utils/test_check_dependencies.py 9.5.0-1/mysql-connector-python/tests/ai/utils/test_check_dependencies.py
--- 9.4.0-1/mysql-connector-python/tests/ai/utils/test_check_dependencies.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/utils/test_check_dependencies.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,109 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import importlib.metadata
+import unittest
+
+from unittest.mock import patch
+
+import tests
+
+from tests.ai.constants import AI_SKIP_MESSAGE
+
+if tests.MYSQL_ML_ENABLED:
+    from mysql.ai.utils import check_dependencies
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestCheckDependencies(unittest.TestCase):
+    def test_missing_base_dep(self):
+        """Should raise if a BASE dependency (pandas) is missing."""
+        with patch("importlib.metadata.version") as mock_version:
+
+            def side_effect(name):
+                if name == "pandas":
+                    raise importlib.metadata.PackageNotFoundError()
+                return "999.0.0"  # Satisfy all but pandas
+
+            mock_version.side_effect = side_effect
+            with self.assertRaises(ImportError) as cm:
+                check_dependencies(["BASE"])
+            self.assertIn("pandas", str(cm.exception))
+
+    def test_missing_task_deps(self):
+        """Should raise and mention both if multiple required packages for tasks are missing."""
+        with patch("importlib.metadata.version") as mock_version:
+
+            def side_effect(name):
+                # Simulate langchain and scikit-learn missing
+                if name in {"langchain", "scikit-learn"}:
+                    raise importlib.metadata.PackageNotFoundError()
+                return "999.0.0"
+
+            mock_version.side_effect = side_effect
+            with self.assertRaises(ImportError) as cm:
+                check_dependencies(["GENAI", "ML"])
+            msg = str(cm.exception)
+            self.assertIn("langchain", msg)
+            self.assertIn("scikit-learn", msg)
+
+    def test_version_too_old(self):
+        """Should raise if one of the dependencies is present but too old."""
+        with patch("importlib.metadata.version") as mock_version:
+
+            def side_effect(name):
+                # Only scikit-learn is too old
+                if name == "scikit-learn":
+                    return "1.2.0"  # below REQUIRED 1.3.0
+                return "999.0.0"
+
+            mock_version.side_effect = side_effect
+            with self.assertRaises(ImportError) as cm:
+                check_dependencies(["ML"])
+            self.assertIn("scikit-learn", str(cm.exception))
+
+    def test_all_present_and_compatible(self):
+        """Should not raise if all required dependencies are present and at proper versions."""
+        with patch("importlib.metadata.version") as mock_version:
+            mock_version.return_value = "999.0.0"  # All versions high enough
+            # Should not raise
+            check_dependencies(["GENAI", "ML"])
+
+    def test_combined_tasks_requirements(self):
+        """Should union all task requirements and check each only once."""
+        with patch("importlib.metadata.version") as mock_version:
+            versions = {
+                "pandas": "1.5.0",
+                "langchain": "0.1.12",
+                "langchain_core": "0.1.15",
+                "pydantic": "1.10.2",
+                "scikit-learn": "1.3.1",
+            }
+            mock_version.side_effect = lambda name: versions[name]
+            # Should not raise (all versions adequate)
+            check_dependencies(["GENAI", "ML"])
diff -pruN 9.4.0-1/mysql-connector-python/tests/ai/utils/test_utils.py 9.5.0-1/mysql-connector-python/tests/ai/utils/test_utils.py
--- 9.4.0-1/mysql-connector-python/tests/ai/utils/test_utils.py	1970-01-01 00:00:00.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/ai/utils/test_utils.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,428 @@
+# Copyright (c) 2025 Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
+import json
+import random
+import unittest
+
+from unittest.mock import MagicMock, patch
+
+import tests
+
+from tests import foreach_cnx
+from tests.ai.constants import (
+    AI_SKIP_MESSAGE,
+    DEFAULT_CONNECTION_TIMEOUT,
+    DEFAULT_SCHEMA,
+)
+from tests.ai.utilities import random_name_patcher
+
+from mysql.connector.errors import DatabaseError
+
+if tests.MYSQL_ML_ENABLED:
+    import mysql.ai.utils
+    import numpy as np
+    import pandas as pd
+
+    from mysql.ai.utils import (
+        atomic_transaction,
+        convert_to_df,
+        delete_sql_table,
+        execute_sql,
+        format_value_sql,
+        get_random_name,
+        is_table_empty,
+        source_schema,
+        sql_response_to_df,
+        sql_table_from_df,
+        sql_table_to_df,
+        table_exists,
+        temporary_sql_tables,
+        validate_name,
+    )
+    from pandas import Timestamp
+
+
+@unittest.skipIf(not tests.MYSQL_ML_ENABLED, AI_SKIP_MESSAGE)
+class TestUtils(tests.MySQLConnectorTests):
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_execute_sql(self):
+        with atomic_transaction(self.cnx) as cursor:
+            malicious_input = "Hello World!'); DROP TABLE test; --"
+            execute_sql(cursor, "SELECT %s;", (malicious_input,))
+            self.assertEqual(sql_response_to_df(cursor).iloc[0, 0], malicious_input)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_format_value_sql(self):
+        """
+        Test None-like arguments
+        """
+        argument = None
+        expected_string, expected_values = "%s", [None]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+        argument = []
+        expected_string, expected_values = "%s", [None]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+        argument = {}
+        expected_string, expected_values = "%s", [None]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+        """
+        Test primitives
+        """
+        argument = 0
+        expected_string, expected_values = "%s", [argument]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+        argument = 1.21
+        expected_string, expected_values = "%s", [argument]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+        argument = ";,().=<>!+-*/%&|^~[]{}@#?$`'\"\\"
+        expected_string, expected_values = "%s", [argument]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+        argument = True
+        expected_string, expected_values = "%s", [argument]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+        """
+        Test json-like
+        """
+        argument = [{"A": []}, [{"B": []}], "C"]
+        expected_string, expected_values = "CAST(%s as JSON)", [json.dumps(argument)]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+        argument = {1: {"A": []}, 2: [{"B": []}], 3: "C"}
+        expected_string, expected_values = "CAST(%s as JSON)", [json.dumps(argument)]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+        """
+        Test escape other object types
+        """
+        argument = object()
+        expected_string, expected_values = "%s", [argument]
+        param_string, param_values = format_value_sql(argument)
+        self.assertEqual(param_string, expected_string)
+        self.assertEqual(expected_values, param_values)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_is_table_empty(self):
+        with (
+            atomic_transaction(self.cnx) as cursor,
+            temporary_sql_tables(self.cnx) as temporary_tables,
+        ):
+            schema_name = DEFAULT_SCHEMA
+            table_name = "ABC"
+
+            qualified_name = f"{schema_name}.{table_name}"
+            self.assertTrue(not table_exists(cursor, schema_name, table_name))
+
+            # Create table
+            execute_sql(
+                cursor,
+                f"CREATE TABLE IF NOT EXISTS {qualified_name} (id INT PRIMARY KEY);",
+            )
+            temporary_tables.append((schema_name, table_name))
+
+            self.assertTrue(table_exists(cursor, schema_name, table_name))
+            self.assertTrue(is_table_empty(cursor, schema_name, table_name))
+
+            # Insert an element
+            execute_sql(
+                cursor, f"INSERT INTO {qualified_name}  (id) VALUES (%s);", (1,)
+            )
+            self.assertTrue(not is_table_empty(cursor, schema_name, table_name))
+
+            # Delete the element
+            execute_sql(cursor, f"DELETE FROM {qualified_name}  WHERE id = %s;", (1,))
+            self.assertTrue(is_table_empty(cursor, schema_name, table_name))
+
+        with atomic_transaction(self.cnx) as cursor:
+            self.assertTrue(not table_exists(cursor, schema_name, table_name))
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_source_schema(self):
+        schema_name = source_schema(self.cnx)
+        self.assertEqual(schema_name, DEFAULT_SCHEMA)
+
+        # Test default without making a new schema
+        with patch("mysql.ai.utils.utils.execute_sql") as mock_exec:
+            mock_conn = MagicMock()
+            mock_conn.database = None
+
+            mock_cursor = MagicMock()
+            mock_conn.cursor.return_value = mock_cursor
+
+            schema_name = source_schema(mock_conn)
+            self.assertEqual(schema_name, mysql.ai.utils.DEFAULT_SCHEMA)
+
+            self.assertEqual(len(mock_exec.call_args_list), 1)
+            self.assertEqual(
+                mock_exec.call_args_list[0].args[1],
+                f"CREATE DATABASE IF NOT EXISTS {mysql.ai.utils.DEFAULT_SCHEMA}",
+            )
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_sql_table_from_df(self):
+        # Validates DataFrame round-trip, SQL statement construction, and correct call order using mock_exec
+        with (
+            atomic_transaction(self.cnx) as cursor,
+            temporary_sql_tables(self.cnx) as temporary_tables,
+            patch(
+                "mysql.ai.utils.utils.execute_sql", wraps=mysql.ai.utils.execute_sql
+            ) as mock_exec,
+        ):
+            df_og = pd.DataFrame(
+                {
+                    "id": [1, 2],
+                    "string": [";,().=<>!+-*/%&|^~[]{}@#?$`'\"\\", "ABC"],
+                    "score": [95.0, 89.5],
+                }
+            )
+            qualified_table_name, table_name = sql_table_from_df(
+                cursor, DEFAULT_SCHEMA, df_og
+            )
+            temporary_tables.append((DEFAULT_SCHEMA, table_name))
+
+            split = qualified_table_name.split(".")
+            self.assertEqual(len(split), 2)
+            self.assertEqual(split[0], DEFAULT_SCHEMA)
+            self.assertEqual(split[1], table_name)
+
+            df_copy = sql_table_to_df(cursor, DEFAULT_SCHEMA, table_name)
+            self.assertTrue(df_og.equals(df_copy))
+            delete_sql_table(cursor, DEFAULT_SCHEMA, table_name)
+
+            expected_calls = [
+                (
+                    f"CREATE TABLE {qualified_table_name} (id BIGINT, string LONGTEXT, score DOUBLE, PRIMARY KEY (id))",
+                    None,
+                ),
+                (
+                    f"INSERT INTO {qualified_table_name} (id, string, score) VALUES (%s, %s, %s)",
+                    [1, ";,().=<>!+-*/%&|^~[]{}@#?$`'\"\\", 95.0],
+                ),
+                (
+                    f"INSERT INTO {qualified_table_name} (id, string, score) VALUES (%s, %s, %s)",
+                    [2, "ABC", 89.5],
+                ),
+                (f"SELECT * FROM {qualified_table_name}", None),
+                (f"DROP TABLE IF EXISTS {qualified_table_name}", None),
+            ]
+            self.assertTrue(len(mock_exec.call_args_list), len(expected_calls))
+
+            for call_args, (sql_stmt, params) in zip(
+                mock_exec.call_args_list, expected_calls
+            ):
+                self.assertEqual(call_args.args[1], sql_stmt)
+
+                if params is None:
+                    self.assertEqual(0, len(call_args.kwargs))
+                else:
+                    self.assertEqual({"params": params}, call_args.kwargs)
+
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_sql_table_to_df(self):
+        with (
+            atomic_transaction(self.cnx) as cursor,
+            temporary_sql_tables(self.cnx) as temporary_tables,
+        ):
+            table_name = get_random_name(
+                lambda table_name: not table_exists(cursor, DEFAULT_SCHEMA, table_name)
+            )
+            temporary_tables.append((DEFAULT_SCHEMA, table_name))
+
+            create_table_stmt = f"""
+            CREATE TABLE {DEFAULT_SCHEMA}.{table_name} (
+                `json` JSON,
+                `json2` JSON,
+                `int` BIGINT,
+                `float` DOUBLE,
+                `string` VARCHAR(128),
+                `datetime` DATETIME
+            );
+            """
+            execute_sql(cursor, create_table_stmt)
+
+            insert_stmt = f"INSERT INTO {DEFAULT_SCHEMA}.{table_name} (`json`, `json2`, `int`, `float`, `string`, `datetime`) VALUES (CAST(%s as JSON), CAST(%s as JSON), %s, %s, %s, %s)"
+            parameters = [
+                json.dumps({"A": [1, 2]}),
+                json.dumps([]),
+                42,
+                3.14,
+                "hello",
+                "2024-06-15 12:34:56",
+            ]
+            execute_sql(cursor, insert_stmt, parameters)
+            expected_row = [
+                {"A": [1, 2]},
+                [],
+                42,
+                3.14,
+                "hello",
+                Timestamp("2024-06-15 12:34:56"),
+            ]
+
+            df = sql_table_to_df(cursor, DEFAULT_SCHEMA, table_name)
+            row_values = df.iloc[0].values
+
+            for expected, actual in zip(expected_row, row_values):
+                self.assertEqual(expected, actual)
+
+    @patch("mysql.ai.utils.utils.extend_sql_table")
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_sql_table_from_df_fail(self, mock_extend):
+        # Tests table cleanup and error handling by simulating backend failure via mock_extend
+        with (
+            random_name_patcher(),
+            patch(
+                "mysql.ai.utils.utils.execute_sql", wraps=mysql.ai.utils.execute_sql
+            ) as mock_exec,
+        ):
+            mock_extend.side_effect = DatabaseError("Mock Exception")
+
+            with atomic_transaction(self.cnx) as cursor:
+                df_og = pd.DataFrame(
+                    {
+                        "id": [1, 2, 3],
+                        "name": ["Alice", "Bob", "Charlie"],
+                        "score": [95.0, 89.5, 78.2],
+                    }
+                )
+                with self.assertRaises(DatabaseError):
+                    sql_table_from_df(cursor, DEFAULT_SCHEMA, df_og)
+
+                qualified_table_name = (
+                    f"{DEFAULT_SCHEMA}.TEST_MYSQL_CONNECTOR_AAAAAAAAAAAAAAAA"
+                )
+                expected_calls = [
+                    (
+                        f"CREATE TABLE {qualified_table_name} (id BIGINT, name LONGTEXT, score DOUBLE, PRIMARY KEY (id))",
+                        None,
+                    ),
+                    (f"DROP TABLE IF EXISTS {qualified_table_name}", None),
+                ]
+
+                for call_args, (sql_stmt, params) in zip(
+                    mock_exec.call_args_list, expected_calls
+                ):
+                    self.assertEqual(call_args.args[1], sql_stmt)
+
+                    if params is None:
+                        self.assertEqual(0, len(call_args.kwargs))
+
+    @patch("mysql.ai.utils.utils.extend_sql_table")
+    @foreach_cnx(always_setup=True, connection_timeout=DEFAULT_CONNECTION_TIMEOUT)
+    def test_sql_table_from_df_fail_bad_col(self, mock_extend):
+        with (
+            random_name_patcher(),
+            patch(
+                "mysql.ai.utils.utils.execute_sql", wraps=mysql.ai.utils.execute_sql
+            ) as mock_exec,
+        ):
+            mock_extend.side_effect = DatabaseError("Mock Exception")
+
+            with atomic_transaction(self.cnx) as cursor:
+                df_og = pd.DataFrame(
+                    {
+                        ";,().=<>!+-*/%&|^~[]{}@#?$`'\"\\": [1],
+                    }
+                )
+                with self.assertRaises(ValueError):
+                    sql_table_from_df(cursor, DEFAULT_SCHEMA, df_og)
+
+                self.assertEqual(len(mock_exec.call_args_list), 0)
+
+    def test_validate_name(self):
+        # check valid characters
+        validate_name("Ab_0")
+
+        with self.assertRaises(ValueError):
+            validate_name(None)
+
+        with self.assertRaises(ValueError):
+            validate_name("")
+
+        with self.assertRaises(ValueError):
+            validate_name({})
+
+    def test_convert_to_df(self):
+        # Checks conversion edge cases: None, copy by value, Series/1D/2D array reshaping and column naming.
+        # Should return None if input is None
+        self.assertIsNone(convert_to_df(None))
+
+        # Should return a DataFrame copy with the same content and columns
+        df = pd.DataFrame({"a": [1, 2], "b": [3, 4]})
+        result = convert_to_df(df)
+        self.assertIsInstance(result, pd.DataFrame)
+        pd.testing.assert_frame_equal(df, result)
+        # Should not be the same object
+        self.assertIsNot(result, df)
+
+        # Should convert Series to a DataFrame
+        s = pd.Series([5, 6, 7])
+        result = convert_to_df(s)
+        self.assertIsInstance(result, pd.DataFrame)
+        self.assertEqual(list(result[0]), [5, 6, 7])
+
+        # 1D array should be reshaped to (n, 1)
+        arr = np.array([9, 8, 7])
+        result = convert_to_df(arr)
+        self.assertIsInstance(result, pd.DataFrame)
+        self.assertEqual(result.shape, (3, 1))
+        self.assertEqual(list(result.columns), ["feature_0"])
+
+        # 2D array should keep its shape and receive named columns
+        arr = np.array([[1, 2], [3, 4]])
+        result = convert_to_df(arr, col_prefix="col")
+        self.assertIsInstance(result, pd.DataFrame)
+        self.assertEqual(result.shape, (2, 2))
+        self.assertEqual(list(result.columns), ["col_0", "col_1"])
+        self.assertTrue((result.values == arr).all())
diff -pruN 9.4.0-1/mysql-connector-python/tests/cext/__init__.py 9.5.0-1/mysql-connector-python/tests/cext/__init__.py
--- 9.4.0-1/mysql-connector-python/tests/cext/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/cext/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/tests/cext/test_cext_api.py 9.5.0-1/mysql-connector-python/tests/cext/test_cext_api.py
--- 9.4.0-1/mysql-connector-python/tests/cext/test_cext_api.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/cext/test_cext_api.py	2025-10-15 05:27:11.000000000 +0000
@@ -56,6 +56,9 @@ LOGGER = logging.getLogger(tests.LOGGER_
 
 
 def setUpModule() -> None:
+    if not CEXT_MYSQL_AVAILABLE:
+        return
+
     with CMySQLConnection(**tests.get_mysql_config()) as cnx:
         global NATIVE_PASSWORD_INSTALLED
 
diff -pruN 9.4.0-1/mysql-connector-python/tests/cext/test_cext_cursor.py 9.5.0-1/mysql-connector-python/tests/cext/test_cext_cursor.py
--- 9.4.0-1/mysql-connector-python/tests/cext/test_cext_cursor.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/cext/test_cext_cursor.py	2025-10-15 05:27:11.000000000 +0000
@@ -203,7 +203,7 @@ class CExtMySQLCursorTests(tests.CMySQLC
             [(1,), (2,)],
         )
 
-        cur.executemany("SELECT SHA1(%s)", [("foo",), ("bar",)])
+        cur.executemany("SELECT SHA2(%s, 224)", [("foo",), ("bar",)])
 
     def test_executemany(self):
         tbl = "myconnpy_cursor"
@@ -519,7 +519,7 @@ class CExtMySQLCursorTests(tests.CMySQLC
         cur.execute("SELECT VERSION()")
         cur.fetchone()
         self.assertEqual("CMySQLCursor: SELECT VERSION()", cur.__str__())
-        stmt = "SELECT VERSION(),USER(),CURRENT_TIME(),NOW(),SHA1('myconnpy')"
+        stmt = "SELECT VERSION(),USER(),CURRENT_TIME(),NOW(),SHA2('myconnpy', 224)"
         cur.execute(stmt)
         cur.fetchone()
         self.assertEqual("CMySQLCursor: {0}..".format(stmt[:40]), cur.__str__())
diff -pruN 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_CA_cert.pem 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_CA_cert.pem
--- 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_CA_cert.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_CA_cert.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,23 +1,20 @@
 -----BEGIN CERTIFICATE-----
-MIIDvzCCAqegAwIBAgIUNN6w0yG+3s0UjDtsrjE397tdjKkwDQYJKoZIhvcNAQEL
+MIIDVDCCAjygAwIBAgIUTej9HSiAKv9t/rcDamTu5chMKWUwDQYJKoZIhvcNAQEL
 BQAwQjElMCMGA1UECwwcTXlTUUxDb25uZWN0b3JQeXRob24gUm9vdCBDQTEZMBcG
-A1UEAwwQTXlDb25uUHkgUm9vdCBDQTAeFw0yNDA3MTcxNDU1NTRaFw0zMzA4MDUx
-NDU1NTRaMEIxJTAjBgNVBAsMHE15U1FMQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0Ex
+A1UEAwwQTXlDb25uUHkgUm9vdCBDQTAeFw0yNTA3MjMxNDUwMDZaFw0zNDA4MTEx
+NDUwMDZaMEIxJTAjBgNVBAsMHE15U1FMQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0Ex
 GTAXBgNVBAMMEE15Q29ublB5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQCNU97gnN446hTc/jClOMw0ElnEAej86TlLm/pD/Ay/t2h9ZBZw
-TNnysRBCOC73pFRM4QdYBpgiXLbGn73ASrCFrjGFQoiyVSoSZ7vcfg0zjyVsZ/Kn
-T8qZMkhnXnjYSm0irEOFwzsMa6wYysWD/C/0/9Xj/0FrHlVeNkV6F1DLF0OSt/Lk
-8EeKPFbMbcLLwvOkcUOW/s+z9WuqWaIqtfwvbgNRgaPHQjPD343uaR30uAOOARns
-YeqQzS3p4QpSWCLMIUEP7RhNnxwXrYqBrviGUyicHg1zlaXuH135JkqkNIAnOJiw
-9e0hZmStUU03q5tcmxi3FQxFjvlAr8Hj1hJJAgMBAAGjgawwgakwHQYDVR0OBBYE
-FDeEbiQ4TKq9i/zdmuLsspgwtXOZMGcGA1UdIwRgMF6hRqREMEIxJTAjBgNVBAsM
-HE15U1FMQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0ExGTAXBgNVBAMMEE15Q29ublB5
-IFJvb3QgQ0GCFDTesNMhvt7NFIw7bK4xN/e7XYypMA8GA1UdEwEB/wQFMAMBAf8w
-DgYDVR0PAQH/BAQDAgKEMA0GCSqGSIb3DQEBCwUAA4IBAQBH/TJFvqV8+CPaOFkF
-4/K0pg0Lx/s8g6y6P4a/GK4T+r8N6kK7KY5Ss1ikuUzbf3WyXEj442yNxhkHXRQ6
-u+7/5EXQ8sFn0cpDkMWBqcUBR5woz6VQCueubhXp2u50PfdYi6f892MBAQYQTBo5
-wJ/lg7Fv7vYQ+AtzkTXSLZprfZJhmZaWQaAruWcZ4gRAzCfOXgCP+SI3yXSeckRy
-6u1UnXlZUI2a0Js6vSi+NDmteN3Lt/b/rmVsU3JKrHEBtg6lE68nrBrnObMKpjXo
-G3k2BZyjGqWxOz35F7ppA9kG9tLXhTHTmg1xzf69CXdseHds4z/8anCs9xj5n5Kd
-HFU8
+DwAwggEKAoIBAQCZmeDw2B9kLIhIDhRpfhyH9cMMP3EizO4GUt8R/3+pTFzAG1k6
+Du8yLc+fV/Uj4T5ekceQb7Mzx3ZXnwmXRboMbOHLouveK6+zPLB9gmmkjKWxHOPV
+LSPoasmiwd0T4iHMb7GMmM1VGshU/u9wNzngUipxwl3WszxtlawZP0vf+n7HhM7j
+9ZGIcfumofPM0aVOE+KXLXibrBrGIsfkftgX6mwoBoOZD7HmitS5u9WrJpFhML8l
+JNwja0jL7BGjoCo8vZvedlmipeoU8lX2Noi+ByPXRtMa2xP6cdq6yJYMwop236t5
+MoT8dNJCl227QtWC8lSl1MykKFoRTOambKzVAgMBAAGjQjBAMB0GA1UdDgQWBBT8
+ipANhX+w5LQG4vUd+AeZrK2qRzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
+AwIChDANBgkqhkiG9w0BAQsFAAOCAQEAl9FHm65FWt9Yqtg1wp5pUn1b+N38FyEL
+NU1bsT7i2zoHeVJCST21iP0fit1Qvgh1AVD/Ij8ToigZ2DUBZ0VN7res7nw5IAQU
+HLMskcuR0kRXWmNptzm0ypsvSvuZXxp/Z1rUTE4Ru2aftiSQRawm/ncUkwBhAWCb
+MEmvI8zXKmNMsrK9FT6RbPDZwIV1dF8Ul84dGH8vHaYV1YFdtrwpm7PUcRpt6bcD
+ZEiuFiWJEglDTruyEQnxlJg3AoiMRZBR7lqKQQe68ZDGOTPwT09f646fAM/Rh1L6
+pvdVkgyioAZM3Rr37NUcSHKJZ1vdBffWaP0xzdsNY6NoBelasGYxYA==
 -----END CERTIFICATE-----
diff -pruN 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_CA_cert_1.pem 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_CA_cert_1.pem
--- 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_CA_cert_1.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_CA_cert_1.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,23 +1,20 @@
 -----BEGIN CERTIFICATE-----
-MIIDvzCCAqegAwIBAgIUQl74ra4QmOLHDFqu642Wk1aM7aswDQYJKoZIhvcNAQEL
+MIIDVDCCAjygAwIBAgIUPVpd8233NH9o2v+aTQDLOuQGTIgwDQYJKoZIhvcNAQEL
 BQAwQjElMCMGA1UECwwcTXlTUUxDb25uZWN0b3JQeXRob24gUm9vdCBDQTEZMBcG
-A1UEAwwQTXlDb25uUHkgUm9vdCBDQTAeFw0yNDA3MTcxNDU1NTVaFw0zMzA4MDUx
-NDU1NTVaMEIxJTAjBgNVBAsMHE15U1FMQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0Ex
+A1UEAwwQTXlDb25uUHkgUm9vdCBDQTAeFw0yNTA3MjMxNDUwMDdaFw0zNDA4MTEx
+NDUwMDdaMEIxJTAjBgNVBAsMHE15U1FMQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0Ex
 GTAXBgNVBAMMEE15Q29ublB5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQC/Gl9G00CSuc+K/r/GZZdvXe4G+5//hGKuRyIsnigg08zS8cIM
-tJKbbfDe/lyZCsA48UOuhMILSSqZpEgTw+SkHv+lkdW+nwCNsFiCtC9grcFu6+e/
-BiSxIcvX/lBnRnLbb2cALEx0TbcFWprVc4l6HtIHdTLd4Fv+dg9GiOq9DikFtJcn
-HDxcb6UrRtR9yu/Zt4BHqEbe6gJrU4E8mo1+A8xn6Yqy7S2zPA+05aiGzlMTrUMZ
-wH1niSy7r9ykGudzKM6epr7GuLPYwp107UGuPb7DRbvZPxlFEaFTD6KYUJaQ2wXL
-bK6GgZw4F+tqAZEcjlIN3YpkiU780fdvSh19AgMBAAGjgawwgakwHQYDVR0OBBYE
-FAy0wJeydR5RMWb6wvkaQPmfC+icMGcGA1UdIwRgMF6hRqREMEIxJTAjBgNVBAsM
-HE15U1FMQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0ExGTAXBgNVBAMMEE15Q29ublB5
-IFJvb3QgQ0GCFEJe+K2uEJjixwxaruuNlpNWjO2rMA8GA1UdEwEB/wQFMAMBAf8w
-DgYDVR0PAQH/BAQDAgKEMA0GCSqGSIb3DQEBCwUAA4IBAQCVISqDAVMoRe1e4Q2U
-XHKB3vHfcsv68/unWA/gTBz5cNxFM4G+c0owCmqE0z/5NNq1fcQTbHaHlRALb4Kj
-YOumpjitXJdTt8e3p5p9Zq9kU9Qkt3wEdQRiSFklNxeHpf9Slknl3HfJUpJIbdQ0
-fmTdZuNpfzh1a3aZT2vsMqoa8WyArFloJaLyUd7/gsfAPxS41YnVPyrgogmdO6sj
-9HoIiftHxCJwBUcUghUj/Rffizcj5sjvgIBQXplY1zgeY66uKMMMBVp2YZvcLvpt
-I8I3meVMB1HJ0XQrsAXBDmtsGhaw8ht8xX6FZnWBk2/4fAQ+T59jcoojwKm36IJL
-7gdt
+DwAwggEKAoIBAQDWhlY6AyR2qqG2hjNlKZEAsUFpi/z71JIGH4m+2m+ezp8THCiD
+NKTBJ7JegXZ36BrZJtPAZBuvJPoLDAU8qp6+cULVDtsqKDwagJ3AufXKHog35yWb
+Qu+EacjsDH4Sk+jpMR68fVMoVG5kdj5GTVecDT88xeLi9klcJwZytjlrysM7Bqpc
+YqSQZCtKzeT3BVCxPVdO5JkL1bwd5ytG+qCaE2OPDL3sodmmm1nL1KKDzHzHgbnl
+XLbZYsxaxbVrTLtD8Mgg+a2HqIEnm8w3mwpKhaHr7OpDsCBHZcGu3xkxzHdkhZuK
+VYLymHIAPDiQWzFhVryl5jD5aDXigyrd/gQpAgMBAAGjQjBAMB0GA1UdDgQWBBSO
+ouRdQvxugPnYjc8NuapzgunABjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
+AwIChDANBgkqhkiG9w0BAQsFAAOCAQEAoXOEKhiW1qtpLkwauToA00mRK513hsXN
+uwmI0GEnKi0uY/RcZgiLmv+uMi/VS+dcwpEnCQ/c5iKkQVOdX4A0PN8a+3OXGe5k
+xqxWynm6xLLEC52g+Ap5ebf235UiDaW380wpkWlJ+2FT49mq0Fp5m1Cb/Z1wqWOD
+r9HMwIodAiJZrY4H4WXXOqCNePiyjxrYMSuayz9SdlEzosXjjxbolEPUWYZzyIJf
+Du9HiWJtR+X2gQEOk1d4B9uBb/J+FX4+CnkbiLK5E2zBl9ERp713AlIOFoZI8XP7
+m0JBjvbxC2jxsJvzNvO0UYYT+Owoe8GdWy70QKey7CR9JwXxToGAYg==
 -----END CERTIFICATE-----
diff -pruN 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_CA_key.pem 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_CA_key.pem
--- 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_CA_key.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_CA_key.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCNU97gnN446hTc
-/jClOMw0ElnEAej86TlLm/pD/Ay/t2h9ZBZwTNnysRBCOC73pFRM4QdYBpgiXLbG
-n73ASrCFrjGFQoiyVSoSZ7vcfg0zjyVsZ/KnT8qZMkhnXnjYSm0irEOFwzsMa6wY
-ysWD/C/0/9Xj/0FrHlVeNkV6F1DLF0OSt/Lk8EeKPFbMbcLLwvOkcUOW/s+z9Wuq
-WaIqtfwvbgNRgaPHQjPD343uaR30uAOOARnsYeqQzS3p4QpSWCLMIUEP7RhNnxwX
-rYqBrviGUyicHg1zlaXuH135JkqkNIAnOJiw9e0hZmStUU03q5tcmxi3FQxFjvlA
-r8Hj1hJJAgMBAAECggEALKEBH036MN/escDFbM9oUMNAvJBb2k3t7W32lHRqNDp/
-USWDnnfuVWDLwRWL42DtzA89qfL/JM7BWyzDl48eekB9W9ccYrBZJlHCtcjKc28v
-QrH6oxIj6MfDrHzdTXQHTa03b2ys32m7AWM7B0hifowxp5uKNYDxNVyPCRSGy3L3
-jYd4h67wpEyaNg5bwtvkOY8WSUlYOPHsqoV1aDwzYlrVENKCFxxdkppBCLJHCH2p
-EDVuN7N9zfSzhZK9dN+ye5OcN6YuTEIvnrNZuhk2l91COuyUbX2yFcEGAF8MkHHQ
-LKYUkHdmJa/t9ZwK7JREd5o7Xuh+FyCtJ9cf+zeA1wKBgQDEnnxHafhdtVq3ANsG
-QAbhsPugmQPWDEQp7udwKb6atyz3vDzNx4Uqv4lVN5QFWfAaKeq5o9Kzm4fLq0h2
-kNK7yRoEKl2xCTT+aaUDwHpxC1zno7lVTzYIt9DgKUDfiakuQQ3cO5IHHeanyLbt
-RQM6NJ9xY+hh6axkKWFCU8ZtZwKBgQC4Ao0GifxbORFdjxcKVknzfauIs5rnncHy
-0DUSFlJPWOTUPqRZySg0imWmtq4cFu9A11ZXaaJAdXJ9nADsLina4HDo5v16IDVM
-WLAeuy6LyLh3HF4F2s78KeRi0PQCZ8ud6xyZ2nVdAReTaQWqB4LLDlTqKeEkNN+d
-xkMdMyIEzwKBgE++R4FfRVAcQZJ/UlWSmjfm4+caqCekCfFH563iAGAXcrF3MuHy
-zdusmzJovCv/chXqcjygaNBXgBfmfBk6W3217ktKM32d0lRs3HRNGFvI1AFOsdgb
-rDqU8q43jQwcdPVBhTGRJ4SjZ+0cxrQsjUaKGTCP6KvtbfGhpsST3aJ5AoGADRep
-Xxi8SuVRlf2TXxnqoxeC9/QHholT/mnQDNxnuNuTVIKsgPLuGGbseqMu2jLLjSqF
-Ky0J7Vot7kAGVMeoFLm5bujYijL2d9srlNQuqKV8coUjL3l1Fr4IUPubEPy/oRnU
-bCH+DcMBIWzsiT+Fj9sSMaMPMNtOOdSce9xihEMCgYB89V+H3E5Lcqhjc7RUTdD2
-9JcHeDEuSLRNtA/gnHJggu2a+LIGQiHHAIvFbyaVNjGSLh5vkbhgRUc++75aDGrK
-cCQEGOxaSjcp79yJjwt92G2+83RNXNJpSu6aMn050+HCtj2WknfULIG1RJVvpiuM
-vrz276Th+BbxtZI8ikXKvw==
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCZmeDw2B9kLIhI
+DhRpfhyH9cMMP3EizO4GUt8R/3+pTFzAG1k6Du8yLc+fV/Uj4T5ekceQb7Mzx3ZX
+nwmXRboMbOHLouveK6+zPLB9gmmkjKWxHOPVLSPoasmiwd0T4iHMb7GMmM1VGshU
+/u9wNzngUipxwl3WszxtlawZP0vf+n7HhM7j9ZGIcfumofPM0aVOE+KXLXibrBrG
+IsfkftgX6mwoBoOZD7HmitS5u9WrJpFhML8lJNwja0jL7BGjoCo8vZvedlmipeoU
+8lX2Noi+ByPXRtMa2xP6cdq6yJYMwop236t5MoT8dNJCl227QtWC8lSl1MykKFoR
+TOambKzVAgMBAAECggEASIyMWOWTyiJYikQQMxWMT1Fuu3m5q7jEkjsRPrSBrUqy
+olAokEoeg4JsxvPqBvTsGwnbCycfKs1C4bbt9kPKUPUany7IHmte9Rcsu1NeJ4kA
+98tP90/3Xl8V9uh/TdVopmF5KJHBpjlctvykxklnbkMQ5iNqZC7LU2022MPzSAoS
+lukXYghmDmMuyRjMU+6zCZgmEfpsWUpvqllI/nOABRmzHRIAkpM9gGruCQD+CayA
+LSJxqoRdwT9VB0zvD3w8qEIAQRjzlf5EM9PmS91QjFipOb2Zw9bUsCk8OjFC8RsO
+klxuXBOtpbEF4OKRA7BcjLcE06hrc+91rtYcMlsjHwKBgQDUQZUc8Wg/FRynfqVS
+y65xCx6BmxQ7xEt5lf+Afri4ZVUcCuJwVHoI4ZqNdM4w3SxtxOVNyE1QWRMgBYtd
+yUoUgtPwwkoBGp6l3oevD2HWMjz64fYaEbgOeIrOyU1LdD1FQysMEeUVpjhChZRr
+hrN9WJOFs0xEwDay2t6IPNPVUwKBgQC5QbbCttr6gceFs19ErIqYJpkzsjIz5CTw
+l4+tgO/84iKWQE4LnPpkAuvVY5xLJ3smwIiivX/s1g7y/AKkfdxL8yl01PcPND1z
+glLmHv4taCfhqFNHOtxQsBJSSC6wAZCIaiLIubxEJIXhYN6nVIiYDE2vQSf2f08H
+82xrv5vINwKBgD6gjye4DwM17nt5Qbx5PqI6HqktIb40v/RDDt1SBpzZwVAB4ig0
+tME0F88PHNuMFtTYmLPnmvBPJ/Z1zFZC0ynUJEbQfNdwjEjyrOQ5TKvPrPB1hZDR
+k5YpeQNkn/rYdE+gbu4jxY0qu0Tddxp25zTf0r9LVQCgGkORksFt+S7jAoGBAKOx
+AQAD+nGnAtmMqP1RSBUw5eXb6qgXStybzwSMDYHxfoYsw8lXJ5f/TMr8fTma5SJU
+tWa28rYeXo8tRlh6LZGehl8JXlQ84J+T5BQaBpWwlqy5wvwJcmqJaWbzCO3UNBWV
+Uq7yDvxXGUUQByzrcNaI6IuWku0niHmKCZ8ba1b5AoGAbZb2VmUPy9s6vuEPzvTl
+zKV5hdF6vlr2zZrGPKuVYmDq7+9atOFluuQ9cwqEnBMyltcE8A3aLw7B9aMibG27
+nUtmxFNA+gSGkE9KE80ZpXUhYYpZklVLw1CL9RAstlaAyCjRmbj1Zt3QWFTKIm7c
+PjM5cwoUJMSja0ziwfbam4Q=
 -----END PRIVATE KEY-----
diff -pruN 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_CA_key_1.pem 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_CA_key_1.pem
--- 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_CA_key_1.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_CA_key_1.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC/Gl9G00CSuc+K
-/r/GZZdvXe4G+5//hGKuRyIsnigg08zS8cIMtJKbbfDe/lyZCsA48UOuhMILSSqZ
-pEgTw+SkHv+lkdW+nwCNsFiCtC9grcFu6+e/BiSxIcvX/lBnRnLbb2cALEx0TbcF
-WprVc4l6HtIHdTLd4Fv+dg9GiOq9DikFtJcnHDxcb6UrRtR9yu/Zt4BHqEbe6gJr
-U4E8mo1+A8xn6Yqy7S2zPA+05aiGzlMTrUMZwH1niSy7r9ykGudzKM6epr7GuLPY
-wp107UGuPb7DRbvZPxlFEaFTD6KYUJaQ2wXLbK6GgZw4F+tqAZEcjlIN3YpkiU78
-0fdvSh19AgMBAAECggEAFFiY8z/znIuG4rwLq/JOBK/h80FgAALWxMpTA6AVEqWq
-JX1S1Sp2f3Ddl8hKEIs5+vYI6DA/PpdcHz6D5ALTuXuJaVXVBXYFR5CSY9wOPUNS
-mF4qbsaXKnq4KrdrVQuFmAJM25Jb03ggt8O1P2uNJADbCKs8Lq4/7SAhsTdLkrQb
-lq5qhntRcIiX3cH9bFIITEw9I2nyOY8ruVtkCMU0XQlQWvrB+MgVfHhsLIr9LiNh
-Eo/ixf/XFRHF164gPS3LqE+d6Lo+6EDFQHH6XVSvD68r5fnTKOtffdrpcSnbiHW+
-rdnEYnYYaYGBVzKaq/gLou8vlc6XzBF3vXacLkvOuwKBgQDokVnn8hXWwK5GQuFG
-ytHSDTf8bZkYZ3lV6P1Rn5EjyhAc7Q3NyRHU3Oe95rdGWso55JkhGMS3kw26ydMZ
-X92oV2kLT2KO1SThC9zdY1L5Klu7TVZokbEYN59bhG7aapfy0mWJH9Q+ql2mN1u8
-rvSDsZkt7Don5adkTiqtWIpjHwKBgQDSW4PvGvs1pHx4x33ag+b8zY+M9qfSjzys
-tbv3XNu60HP5ScOLCGrBgo11OvDY5N+HmklWo5F2XTqQLbQv8pX3pubY7OWBZOK0
-lCrTMODqC38dRChV6YTHrirrWMVV70QJJl17yAfLNnRQ93kZ0KcuOAVbbCqGs738
-jW/PT7Wn4wKBgDhfs1lj9yM9RYFGiPDuDPpLtfx8XJXrzx+iAHWepkH0ov8//w6Y
-5LeibJI9sMNfEpIB9ZRuOpD9FmDmt0L5V/OMbKwPLCbPR8c9ZuZLQzuepum6D239
-kt357ajzayOKnxZ/JZmdm4ctKNI3rQcJqb+adzUIg/hT1MWdpP6r7a+lAoGAT9bg
-Kl5JPkDh5U2CHO+3OfgjJdNwOuCWnM6VOvuJgkwf2FwA1cIqEqwkWHw4cXncxTDv
-6OxIB263DYXrP8+Iz+gO8gJn0UajLPqXjnScyPf4FPmLfaAV/1vBenXE4Crh3b8r
-+BEhtCVE3H4w/nVNHqOwlNRnB50s3LAp4btVLRUCgYA11DrPSWJEgOJWygkRJd8h
-R70aa3nf0JnHheuw0J40yCQ9ussIEBLnB947bcv7XD5C84WKW7gy1LhYNu6K+STY
-NPMAUGKg6l+yuPM5VlgrGaS3CLJ2jheFydqo2S5S9578cCDVO7QgCBeyngBWRE2d
-jCXWlfwUMJlJIuwFBNX0Cw==
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDWhlY6AyR2qqG2
+hjNlKZEAsUFpi/z71JIGH4m+2m+ezp8THCiDNKTBJ7JegXZ36BrZJtPAZBuvJPoL
+DAU8qp6+cULVDtsqKDwagJ3AufXKHog35yWbQu+EacjsDH4Sk+jpMR68fVMoVG5k
+dj5GTVecDT88xeLi9klcJwZytjlrysM7BqpcYqSQZCtKzeT3BVCxPVdO5JkL1bwd
+5ytG+qCaE2OPDL3sodmmm1nL1KKDzHzHgbnlXLbZYsxaxbVrTLtD8Mgg+a2HqIEn
+m8w3mwpKhaHr7OpDsCBHZcGu3xkxzHdkhZuKVYLymHIAPDiQWzFhVryl5jD5aDXi
+gyrd/gQpAgMBAAECggEAQXwZdzT9XQICQkreBnv1SP5S5uq2K5N8jcTz0eAxIYuW
+MImwbjjUMCgzgTjI1ppyE6aQDhMhBkplz5h4QsgclCrTyWDzEv/cNQTc4veBKZU/
+ZL05FBePMN7v1+qKU5Z2CzUU2lnxWAbJ+f3ETcaPP1Il4yHO/BRNWYWKKNsqVRYt
+I/ORfvxR7M3mfvMF9AfS2Fmb/9Z4t9OePYFiZ6JntzivStc6/Cym3WZ+Di8TOJ54
+0f1rllVL+DVVOSBoNpQv+lZJueJbL83YvszfSXEEBkl/ufRKxQVsL3YD6tCa8Xop
+hP9c+3nurPn9+0l/iOH2yDMCbpKr6Z87WB4PIzJYjwKBgQD8MkNxrWS+8ocYc823
+qCUkVjLgz8SeCgLvD/YUQ45KlxObFfXo2Cu5TRNkyIdnW4mSq4vbXJ13MizaiSU7
+5gDAr0FTi2+8Mmmljxp+pRafdTr8SdI2wsKPgzdr1QylpfO7YO/Cha8MzZhVNTDU
+D1hq/iHQoM9Wiy+NPVFmPGmlhwKBgQDZwp9VmLWFbIXHT3+eTobRKMbhVCRUoT59
+KhlMLrj2ljRqM3Tz44AWgjGYHVWe0fdBjfEnHNEOtoSRKuS4amMWqzQquh93+154
+iu0wZHCNHG7uZqhzivU9oQuyZAsAiW7hyYQznoq0OK+Il/En20b4wJxkgq922dnF
+9sXxEfB0zwKBgE31r7mdUy5fxHk/mxEx7kFcUCAEug/solmKQpSjCYJvT0U6tajD
+4khG1j7qakj+F/n6A6LM73RgU1M+3/6zK/pkcrpDuUehAd2G7jbGC8dBMvm4TD5X
+WFOKyYAQ/Pbb5QtAfP1R2/oGOBfm+HAlSjzQ0F0wyMdFAW8UzGvhMvtTAoGAe1sB
+sZZ5NaTdP6OsMnxfaLrFtr1Ye0yAPp0LiZlqE93QwVx24vW8CIQmHfp4Fyjv/QWw
+Vyy+zKvd+vImcMVrblr7iTy4ONp/kJ96b5BmJbm2qXwj7pgIBqplGuALT3mLA4KJ
+TkiAYElAPot8A8z2rlFGBrX1Ocl80OTTCpXT9gcCgYEAuOsfX9SRpjLkfBbLKA/R
+ModAYHgD7uSAQNuJ8zmaFbIpDKLI8vDGKlTNTvNd2OM+V6GHCs85Uw5vnIpsK4gN
+QkEbCnyuxhzzTGLkuwrFqAWz3X9qKvJYwmCMvmeLSb25XpknCUghmCgBph7Q3g6+
+p+sKLqN9PTpWiGyZe8wC2qE=
 -----END PRIVATE KEY-----
diff -pruN 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_client_cert.pem 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_client_cert.pem
--- 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_client_cert.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_client_cert.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,68 +1,75 @@
 Certificate:
     Data:
-        Version: 1 (0x0)
+        Version: 3 (0x2)
         Serial Number: 2 (0x2)
         Signature Algorithm: sha256WithRSAEncryption
         Issuer: OU=MySQLConnectorPython Root CA, CN=MyConnPy Root CA
         Validity
-            Not Before: Jul 17 14:55:55 2024 GMT
-            Not After : Jul 17 14:55:55 2025 GMT
+            Not Before: Jul 23 14:50:07 2025 GMT
+            Not After : Jul 23 14:50:07 2026 GMT
         Subject: OU=MySQLConnectorPython Client Cert, CN=localhost
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:90:d5:5b:26:3a:2d:94:30:f4:e5:70:f7:bb:9f:
-                    28:3b:29:9c:87:e6:6f:98:d8:ee:7b:0b:a0:57:5c:
-                    69:9a:2d:d0:c9:64:e6:f9:51:02:ef:bb:64:fc:17:
-                    4b:18:04:30:ff:7e:f3:43:a8:e9:3f:f0:30:4a:f2:
-                    4c:08:a6:ff:58:3d:a7:ec:d8:7d:a0:b8:c5:a4:5c:
-                    a7:cd:7c:92:b8:97:c8:c4:18:76:f2:7c:0d:4a:a0:
-                    32:85:0a:35:fa:ce:d7:09:46:8a:d1:9d:0a:1a:23:
-                    f5:7f:77:12:ff:b7:d2:6b:43:d2:b7:2d:16:4d:a0:
-                    2b:47:12:62:c0:3a:43:f2:99:b9:e5:02:11:1a:81:
-                    b5:eb:6e:8b:ba:a8:79:c1:78:51:01:12:0b:92:51:
-                    ba:7a:df:18:80:08:15:96:e4:26:eb:d7:84:b7:2e:
-                    61:5e:fc:cc:03:5d:c0:b3:25:50:f3:dd:4a:3c:43:
-                    6b:ad:1b:6b:7d:04:13:9d:fc:0f:34:d5:68:45:2f:
-                    0f:44:ae:10:96:66:5d:c7:bc:01:4d:f0:3c:b6:8d:
-                    96:a1:70:92:6f:1d:aa:e7:ad:25:bd:57:e9:6f:a3:
-                    f3:dc:53:82:d8:52:db:18:94:a1:6c:1e:53:f8:0b:
-                    de:a6:71:d6:45:f3:a7:5b:f7:49:e0:b2:c9:bb:8b:
-                    65:9f
+                    00:92:1e:56:6c:9c:80:05:ab:0b:bd:f0:57:0f:a7:
+                    bd:67:b7:f2:1f:e3:1d:62:1a:81:a2:9d:f0:bf:9d:
+                    20:25:65:5f:6e:fb:74:54:27:a5:cf:cb:d8:88:44:
+                    39:2b:8f:1a:73:7b:0a:59:2e:97:d9:eb:d1:a8:70:
+                    0c:26:c8:11:97:e5:0f:ac:78:84:1c:ad:67:28:19:
+                    a5:07:00:85:67:0a:82:dc:e9:14:0c:15:16:e5:6a:
+                    10:75:55:83:f3:ab:d0:07:5c:52:af:3f:73:bb:e0:
+                    88:9d:39:ac:e9:50:c0:ca:e0:81:76:ee:40:7b:f0:
+                    88:03:44:7e:61:84:0f:aa:95:d6:0f:70:fb:05:46:
+                    6c:45:04:e6:0c:3c:c6:52:b2:04:e1:7e:35:20:68:
+                    9c:b6:05:ef:1d:2a:96:24:b1:9d:5e:9d:4d:97:69:
+                    6a:33:41:58:85:22:7d:2e:c8:e4:c3:3a:d7:19:d2:
+                    50:e4:09:6c:ba:5c:8e:7d:fd:60:8b:a2:ab:2a:44:
+                    4f:3a:ee:92:35:04:1d:ac:29:b4:b3:88:28:c4:9a:
+                    f0:8e:6e:9f:e8:fd:09:ba:58:dc:93:9f:f7:bf:aa:
+                    a6:9c:0e:2c:fc:01:e8:7d:41:71:46:37:c5:8b:e9:
+                    3d:06:a8:0f:bf:34:80:ba:fc:7d:09:fd:03:60:1e:
+                    f8:97
                 Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Key Identifier: 
+                72:FC:54:C4:DA:4E:9B:7E:C2:42:CB:5E:B5:12:7C:70:87:DC:5D:0C
+            X509v3 Authority Key Identifier: 
+                FC:8A:90:0D:85:7F:B0:E4:B4:06:E2:F5:1D:F8:07:99:AC:AD:AA:47
     Signature Algorithm: sha256WithRSAEncryption
     Signature Value:
-        00:28:99:d3:c9:94:9b:74:e9:29:a8:99:54:7f:7a:d7:0e:dc:
-        cb:cd:58:0d:6c:93:37:9c:59:01:ea:fc:0a:1b:3a:56:7c:bc:
-        5f:0f:f9:cf:fe:8e:0b:58:68:82:75:b5:12:92:f1:b1:ad:06:
-        15:d8:21:ba:ac:92:9c:a4:99:bc:ba:03:10:a7:bc:5d:c7:f9:
-        47:da:43:c0:58:45:07:38:63:40:c7:b6:d0:a2:8b:e8:e4:76:
-        3d:17:f4:6c:14:a9:57:a0:ab:7c:f5:08:17:5a:14:dd:70:7d:
-        2e:7c:00:30:90:d8:c4:c5:cf:9c:33:36:6a:a5:30:b6:d0:6a:
-        a1:43:c7:6d:50:74:ea:1a:b0:bc:9b:b1:e5:46:6d:fc:1e:9f:
-        e6:92:e9:92:3c:8c:1e:10:7e:d0:66:11:e6:d3:98:cd:fc:d9:
-        b1:3f:57:1f:f7:0a:a1:d3:a8:6d:bb:92:55:bf:3d:22:02:61:
-        db:27:c9:db:08:6b:59:1b:20:88:5a:da:3a:ac:95:14:e5:fc:
-        be:04:32:85:88:92:44:27:e2:38:75:22:07:f2:50:01:65:52:
-        d2:ab:a2:a0:a4:58:61:9b:97:61:c5:d4:21:6e:7e:cf:b1:76:
-        35:ba:57:70:cb:0b:5f:0b:3d:48:cd:f3:b4:48:93:e0:7a:fa:
-        78:4e:b6:fb
+        54:8d:a4:52:65:75:02:85:75:77:61:16:1e:a3:4c:ee:06:48:
+        84:ad:00:c3:b0:cc:67:c5:6a:d8:24:ef:46:ec:88:06:ae:d5:
+        e4:fd:d7:23:16:7f:20:ad:5d:89:5e:3f:57:87:ad:92:b2:57:
+        b8:8f:44:37:41:4e:64:73:33:87:bc:dc:bd:f8:9c:01:cf:83:
+        23:c1:09:31:f6:01:f9:fe:05:4d:7e:82:32:d7:0a:a8:ef:0e:
+        61:12:1d:38:1e:b6:ff:65:81:10:39:bb:bf:80:3f:7d:cd:71:
+        43:e9:73:dc:9c:1f:ba:99:4d:48:ac:d3:7b:ee:60:a7:f2:30:
+        0c:76:ac:d1:17:d3:37:b2:aa:b6:30:20:04:29:73:6c:de:df:
+        e8:95:02:fb:de:5c:1e:da:0c:8d:d7:77:3a:1a:d9:33:75:19:
+        8e:a0:37:12:f7:f9:87:7b:4d:22:c0:e5:9d:b4:43:b3:b3:33:
+        91:76:a6:30:33:6b:ed:68:6f:e0:fb:96:e0:a9:89:93:31:f7:
+        90:9d:b4:0d:99:1d:43:79:f5:65:8e:35:09:f0:33:23:8b:0c:
+        7e:3c:56:0f:dd:7d:0f:52:16:a8:ed:e2:0b:80:dd:a6:be:c0:
+        86:9e:06:ea:a2:3e:ee:e8:2d:b4:9f:dd:65:b9:0e:25:a8:45:
+        7a:be:cd:e3
 -----BEGIN CERTIFICATE-----
-MIIC9TCCAd0CAQIwDQYJKoZIhvcNAQELBQAwQjElMCMGA1UECwwcTXlTUUxDb25u
-ZWN0b3JQeXRob24gUm9vdCBDQTEZMBcGA1UEAwwQTXlDb25uUHkgUm9vdCBDQTAe
-Fw0yNDA3MTcxNDU1NTVaFw0yNTA3MTcxNDU1NTVaMD8xKTAnBgNVBAsMIE15U1FM
-Q29ubmVjdG9yUHl0aG9uIENsaWVudCBDZXJ0MRIwEAYDVQQDDAlsb2NhbGhvc3Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCQ1VsmOi2UMPTlcPe7nyg7
-KZyH5m+Y2O57C6BXXGmaLdDJZOb5UQLvu2T8F0sYBDD/fvNDqOk/8DBK8kwIpv9Y
-Pafs2H2guMWkXKfNfJK4l8jEGHbyfA1KoDKFCjX6ztcJRorRnQoaI/V/dxL/t9Jr
-Q9K3LRZNoCtHEmLAOkPymbnlAhEagbXrbou6qHnBeFEBEguSUbp63xiACBWW5Cbr
-14S3LmFe/MwDXcCzJVDz3Uo8Q2utG2t9BBOd/A801WhFLw9ErhCWZl3HvAFN8Dy2
-jZahcJJvHarnrSW9V+lvo/PcU4LYUtsYlKFsHlP4C96mcdZF86db90ngssm7i2Wf
-AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAAAomdPJlJt06SmomVR/etcO3MvNWA1s
-kzecWQHq/AobOlZ8vF8P+c/+jgtYaIJ1tRKS8bGtBhXYIbqskpykmby6AxCnvF3H
-+UfaQ8BYRQc4Y0DHttCii+jkdj0X9GwUqVegq3z1CBdaFN1wfS58ADCQ2MTFz5wz
-NmqlMLbQaqFDx21QdOoasLybseVGbfwen+aS6ZI8jB4QftBmEebTmM382bE/Vx/3
-CqHTqG27klW/PSICYdsnydsIa1kbIIha2jqslRTl/L4EMoWIkkQn4jh1IgfyUAFl
-UtKroqCkWGGbl2HF1CFufs+xdjW6V3DLC18LPUjN87RIk+B6+nhOtvs=
+MIIDPjCCAiagAwIBAgIBAjANBgkqhkiG9w0BAQsFADBCMSUwIwYDVQQLDBxNeVNR
+TENvbm5lY3RvclB5dGhvbiBSb290IENBMRkwFwYDVQQDDBBNeUNvbm5QeSBSb290
+IENBMB4XDTI1MDcyMzE0NTAwN1oXDTI2MDcyMzE0NTAwN1owPzEpMCcGA1UECwwg
+TXlTUUxDb25uZWN0b3JQeXRob24gQ2xpZW50IENlcnQxEjAQBgNVBAMMCWxvY2Fs
+aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJIeVmycgAWrC73w
+Vw+nvWe38h/jHWIagaKd8L+dICVlX277dFQnpc/L2IhEOSuPGnN7Clkul9nr0ahw
+DCbIEZflD6x4hBytZygZpQcAhWcKgtzpFAwVFuVqEHVVg/Or0AdcUq8/c7vgiJ05
+rOlQwMrggXbuQHvwiANEfmGED6qV1g9w+wVGbEUE5gw8xlKyBOF+NSBonLYF7x0q
+liSxnV6dTZdpajNBWIUifS7I5MM61xnSUOQJbLpcjn39YIuiqypETzrukjUEHawp
+tLOIKMSa8I5un+j9CbpY3JOf97+qppwOLPwB6H1BcUY3xYvpPQaoD780gLr8fQn9
+A2Ae+JcCAwEAAaNCMEAwHQYDVR0OBBYEFHL8VMTaTpt+wkLLXrUSfHCH3F0MMB8G
+A1UdIwQYMBaAFPyKkA2Ff7DktAbi9R34B5msrapHMA0GCSqGSIb3DQEBCwUAA4IB
+AQBUjaRSZXUChXV3YRYeo0zuBkiErQDDsMxnxWrYJO9G7IgGrtXk/dcjFn8grV2J
+Xj9Xh62Ssle4j0Q3QU5kczOHvNy9+JwBz4MjwQkx9gH5/gVNfoIy1wqo7w5hEh04
+Hrb/ZYEQObu/gD99zXFD6XPcnB+6mU1IrNN77mCn8jAMdqzRF9M3sqq2MCAEKXNs
+3t/olQL73lwe2gyN13c6GtkzdRmOoDcS9/mHe00iwOWdtEOzszORdqYwM2vtaG/g
++5bgqYmTMfeQnbQNmR1DefVljjUJ8DMjiwx+PFYP3X0PUhao7eILgN2mvsCGngbq
+oj7u6C20n91luQ4lqEV6vs3j
 -----END CERTIFICATE-----
diff -pruN 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_client_key.pem 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_client_key.pem
--- 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_client_key.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_client_key.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCQ1VsmOi2UMPTl
-cPe7nyg7KZyH5m+Y2O57C6BXXGmaLdDJZOb5UQLvu2T8F0sYBDD/fvNDqOk/8DBK
-8kwIpv9YPafs2H2guMWkXKfNfJK4l8jEGHbyfA1KoDKFCjX6ztcJRorRnQoaI/V/
-dxL/t9JrQ9K3LRZNoCtHEmLAOkPymbnlAhEagbXrbou6qHnBeFEBEguSUbp63xiA
-CBWW5Cbr14S3LmFe/MwDXcCzJVDz3Uo8Q2utG2t9BBOd/A801WhFLw9ErhCWZl3H
-vAFN8Dy2jZahcJJvHarnrSW9V+lvo/PcU4LYUtsYlKFsHlP4C96mcdZF86db90ng
-ssm7i2WfAgMBAAECggEAB1UV3pbMGCZtdqmLWE9Tq0+NN4AeEK5bwAbCGeaV7EuJ
-Ro46MDMUFVATTYPsYMZUqLVc9sxGQ6YS+9MG6UxWoNXLlye3HkMjlma8rryjddRK
-QoQgVe8Nnot1BtvnXiUeYhTVLo0RwmolL/bvoWkMdYgxYOXJkLfV7mXAOXGWJmHj
-J8Uu1AXIXPPZGdkryRMoi7CmPPm3UWiwTlPTFEqEarWmll1uiA65GLot7MMqnNNw
-GyVPE4pWA1sOwbdXH50sCnF1OLLCoCfJcUgNTpLZz0VJ3Nu7TDSj3Rx/d15HPV93
-AmKmsF7TEMTaAmwL6txbo69c7QDZ85WoU7djyTtFMQKBgQDBqKpdQgEgNNrwjp+P
-FwMfVrhoJKVaN+OHrbBbm7hw7szbUhSVs2A7WgxVQad/oFIdbMSYwrIrMgEoM1uI
-MpiIceLa8Ts0d7WlaPHPk/qguauAmeVF6UW0zfvMItCy1sKJqW/shqJFh6zLsPWQ
-bQFLRgcS60gcb+9mGrPvmSjIKQKBgQC/dQKV/uEsY06u56b9O7ckOdtLU4vTw+3y
-rox2VuHTOxRi5/Mn/6r7TRokSp08FlHPNS7EylMdnPJ8JaqfJTozUFKrK7bGvJL8
-TnRMW4PZf6qFuZywr8msW2LLHNUlmReIYzLbQw8PWhiMBBgu3icpm4cv5SRiJAAL
-LAuYgtYYhwKBgAdN/V8XJkO4uqloN8yF6bA87SfAehw1D3gGrShHb2WTHFcJeY1L
-/s0+UEjG+TJvMam6eI/qiB3o/PIvPbyda/N5mDz57GnGOivLEZPq2QFG/5kSNPu2
-GNMBEgZZKdYVE7FtmrMpQOWugG4OdrTD59CXC51DEq0/65/GUhMvi8JBAoGAI6G+
-QnY2KBGvYiPg0z5a3lYaNxGsc1QCo+jSYW/YBXz4VVP/0BDoHG8ED38HdlhdD2hB
-dQSGpXtBMdO8xnOiOkyXph2znZcY7/YV9OQPTNpSvSKHQ+bjbL1xTIXoMWAlng+A
-NohrdBr7eIuGiKp1tWuppENMGyvCClI/MjofaF8CgYBZ6M6txjFn6Z0m9soNX0Lq
-8aMa5+5qSBQEJi1IYGtKXbTvAald9nBXasGKPY+PVImS0PVg70WSj2TrEfuQdXTD
-oIMrccFZhMVUNfYhjzHhL5Hel6hBc+KBn15XmT5R+WHQKRw7Z+CrQnPwLtfRnTho
-x0GGTifc9rGHJfzahlrxjQ==
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCSHlZsnIAFqwu9
+8FcPp71nt/If4x1iGoGinfC/nSAlZV9u+3RUJ6XPy9iIRDkrjxpzewpZLpfZ69Go
+cAwmyBGX5Q+seIQcrWcoGaUHAIVnCoLc6RQMFRblahB1VYPzq9AHXFKvP3O74Iid
+OazpUMDK4IF27kB78IgDRH5hhA+qldYPcPsFRmxFBOYMPMZSsgThfjUgaJy2Be8d
+KpYksZ1enU2XaWozQViFIn0uyOTDOtcZ0lDkCWy6XI59/WCLoqsqRE867pI1BB2s
+KbSziCjEmvCObp/o/Qm6WNyTn/e/qqacDiz8Aeh9QXFGN8WL6T0GqA+/NIC6/H0J
+/QNgHviXAgMBAAECggEAE/KN+YQrRVrSnrVNqrFLaKTn1NWUVdJo3yfbospTBffp
+stojc+JOab3vi2QblT2TLq+zO8s3Z28g70iN8soTqMkDE5hc7232wWEwMnKuQ4u0
++MPdp5abdRST4Z4b25Xu2jUO2VDQE8Ef4ALsfuo2H5wi4HcUbjcUgl8FN8/SXwb3
+tPq5osDJ13x/uO+H+8emGOYJmRO6rzVGGupKwoUlRmQO7da+r7b2xUHPqUY+D+zK
+1n5g0ih155O8ARY9N2Yxo5gOSEjMLWmp7B3Olom1CUP+tMNYsOYKpnD8Hge+oaOV
+8m7KSmJAcmaOS7XHPCCEcMxWr2xMOGUy4GBbPzFbUQKBgQDGlQ6KqBk4D1GXZX4f
+MghLKN+ZRLrBAgYUNAlBoXZZqasLwBCm5IrlJtPiftX6i/mlDS0CXFlEjpn8OiED
+4zRKtgUTzJ7iu2qyg01ZPgLV5S4eROZtKc31Ml4p9qLlHnaJDEl+BBx6RyMAa3r3
+3XWQUvlfsEFII7Dlcpu29LxnZwKBgQC8XfHWOoN2GUcJk1UwzoYzWdadcpng5y0D
+NRP8iUzeHRb/TbJWMO5qDZrsahssiX50RtH99BUL1nbM7/bBBAe9OGQ+EWMAKeuK
+CjMbgyum2DQ9NVpuqnwk+ZDvlB4Y/qiUU3kQ42JH3W+mWWl6UZzsfJHRNFMU5lLA
+hojM+AgXUQKBgAn+QkcUAoDhtHdr8hbby7MMkYQDA2rnESs/GyAkYfJNKYBj3/Km
+GZ9CfvMs8tOy65M0wIkX4J4klvcsbbDmZCFGW6cNawl56PqmxOOyzS26ZMG9MeNY
+cTbfnAF8meHx0IFBDwm6Zzx4C/jfb8a9bEchBc+c7QwWT7acN93THxANAoGAJMi7
+tzgKAAADrU0GL9fEwTZkAK8meZLraVruIjy1tBI+MXD8yHQZusAZZt15nQLknNRP
+oaYOjhc9b9vUdfDRihP/D1fZ22hURMqlHFRLK/PAj8thc4b7Y0URFpf4IK1qQjzi
+wXeF8768VOHVBTv2xv+0ggQTzVsFAe/DuzMccWECgYEAhpnur7ZZ4kd7df8NFAw1
+h3VNGfWIlj6hePIgR0GWMyGRrAVD8SUvK7wAF/6uE0GuGL2IBraVdxstKG7CBot8
+waDL0++LrBXr7FzKVZiG8I+FAkNzzeRUeQ0rwGAH8hjhtwNpzyuiydKeiLhKcgGq
+ByU08hA/fW/HBAFlckCx19s=
 -----END PRIVATE KEY-----
diff -pruN 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_server_cert.pem 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_server_cert.pem
--- 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_server_cert.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_server_cert.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,68 +1,75 @@
 Certificate:
     Data:
-        Version: 1 (0x0)
+        Version: 3 (0x2)
         Serial Number: 1 (0x1)
         Signature Algorithm: sha256WithRSAEncryption
         Issuer: OU=MySQLConnectorPython Root CA, CN=MyConnPy Root CA
         Validity
-            Not Before: Jul 17 14:55:55 2024 GMT
-            Not After : Jul 17 14:55:55 2025 GMT
+            Not Before: Jul 23 14:50:07 2025 GMT
+            Not After : Jul 23 14:50:07 2026 GMT
         Subject: OU=MySQLConnectorPython Server Cert, CN=localhost
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:c7:7b:56:9d:80:8c:d5:89:0a:57:8a:05:11:f0:
-                    1c:64:09:d7:05:ee:61:91:4a:ab:d9:07:39:21:bf:
-                    88:aa:4b:51:ce:8d:62:b7:9a:f9:34:1d:4c:d4:f8:
-                    21:cc:9a:5f:b0:3e:d4:af:ec:63:9f:73:e9:dc:36:
-                    d7:77:ea:da:ee:65:00:39:31:41:1a:10:69:5b:40:
-                    37:15:20:d0:8e:82:05:26:ce:7e:71:81:61:9b:ce:
-                    66:32:a7:65:0d:da:8f:1b:c8:99:11:80:72:6d:da:
-                    ce:00:0c:42:31:a0:13:16:5c:da:cd:75:0e:e2:f0:
-                    e6:85:00:4d:23:6b:52:2c:bd:c3:a9:6d:20:f4:54:
-                    68:ac:a9:dd:cb:c8:2d:97:bc:69:88:20:b1:24:0f:
-                    27:98:fa:66:82:1b:c3:28:71:f3:ed:94:97:76:e1:
-                    6d:d9:39:6d:a0:53:82:c6:59:87:57:57:0e:e0:93:
-                    31:05:e1:5c:97:f2:0d:a0:b2:c1:5b:ef:ae:3a:27:
-                    83:76:17:11:02:cb:d8:03:69:06:67:04:70:b0:10:
-                    1c:58:b4:a9:26:92:e0:b0:24:59:20:dd:7f:8a:ff:
-                    80:79:d5:01:d3:30:23:e0:5b:7e:48:da:03:56:79:
-                    03:df:9a:07:ee:ee:bf:c0:b6:b2:89:6d:c2:2f:4e:
-                    37:ad
+                    00:9f:b3:a0:7a:e4:a0:b5:9d:40:78:d3:7a:83:96:
+                    a3:b5:a3:f6:c7:8e:3b:61:6e:50:87:e6:da:52:01:
+                    5c:55:a6:4f:31:29:3b:d9:ce:a9:19:bf:59:e5:ed:
+                    29:94:d6:6e:9d:94:7b:2c:f2:33:07:df:09:0d:82:
+                    d5:0f:4e:1e:3a:e1:90:c2:96:52:42:bc:be:66:ca:
+                    f0:e9:c4:81:91:98:d3:a2:69:97:ae:ff:61:ff:1c:
+                    71:66:bf:5f:f7:31:ef:e8:90:5f:b3:6a:99:b6:87:
+                    7c:13:d5:c4:1d:0d:3b:49:38:67:76:f0:c8:08:09:
+                    ee:30:a7:4e:57:db:e5:d2:ed:c4:e2:a7:ee:b2:3b:
+                    e2:0b:3d:d5:a3:f2:e9:a6:6f:e9:02:75:4c:4b:8e:
+                    2a:33:e8:d4:7f:6a:bc:48:05:4c:af:19:37:29:cf:
+                    47:fa:76:b3:71:21:35:b7:83:60:e7:e0:4f:59:2d:
+                    c7:fc:e1:36:12:7d:3e:b5:bb:49:83:f6:b6:e1:5c:
+                    79:73:34:5b:15:ae:e4:28:27:c2:c4:75:6f:0f:be:
+                    48:31:85:41:1e:31:a3:1e:2a:f7:b4:99:fc:d6:0e:
+                    95:43:96:a1:c4:da:11:89:47:af:12:98:cc:0e:e3:
+                    0e:85:53:11:6e:f5:f9:f9:87:80:63:53:2f:bd:17:
+                    41:c7
                 Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Key Identifier: 
+                04:1C:59:38:AD:2D:74:81:89:48:87:1C:45:00:89:D4:1A:4A:A5:FB
+            X509v3 Authority Key Identifier: 
+                FC:8A:90:0D:85:7F:B0:E4:B4:06:E2:F5:1D:F8:07:99:AC:AD:AA:47
     Signature Algorithm: sha256WithRSAEncryption
     Signature Value:
-        62:94:a6:dd:34:06:50:92:45:80:4f:61:e3:0e:49:67:69:07:
-        ea:88:8d:24:ec:a1:a4:c8:68:cf:46:7f:80:96:c0:70:f3:c2:
-        d7:ad:09:d2:e3:a4:bc:c6:bc:9a:e2:7e:32:de:c5:8d:07:4b:
-        74:05:07:a9:11:88:09:c1:90:1c:90:14:f4:01:4f:69:83:ce:
-        97:58:15:23:85:f3:97:28:b5:ca:c3:d7:01:13:ff:1d:05:14:
-        ec:76:97:59:5d:8a:e6:2f:5a:50:82:c5:94:00:7d:e0:7d:ed:
-        53:ce:76:39:3a:f5:20:f4:70:6a:df:36:89:f7:b8:ea:5a:28:
-        c0:b4:7e:cf:cc:0f:53:40:20:6e:9b:b2:a3:57:a6:fb:70:a8:
-        cb:27:1d:ce:e8:69:c4:cc:45:07:d6:d4:a5:8c:8f:9f:e7:0b:
-        d5:32:38:fa:a5:53:df:71:a3:54:70:dd:85:8f:da:75:d6:bc:
-        5f:99:22:80:fe:e5:f0:5b:ae:d2:e7:b2:36:ab:8b:8e:7c:d4:
-        ce:29:50:3d:5b:48:5f:7b:80:4a:44:85:f7:f5:ed:40:2f:85:
-        24:b6:af:0c:72:20:0d:34:27:b1:73:ff:28:c2:9e:bf:44:a8:
-        69:8b:de:bd:6e:81:27:68:06:53:ff:b4:e2:d9:cc:31:31:3c:
-        ef:e1:4d:39
+        3f:8c:7f:d9:ef:f4:ad:dc:03:78:30:23:3c:64:9c:7b:0e:17:
+        20:2a:6b:f1:dd:83:c5:01:26:f4:b7:2f:0f:e9:be:b6:b9:c5:
+        56:19:3b:b6:40:27:15:bf:3e:b6:b9:5a:c1:c2:3b:1c:2c:80:
+        cb:62:ab:e9:fd:25:5e:8d:9b:86:6d:c3:e2:4a:c6:ed:97:23:
+        f7:67:5d:08:2c:1f:6c:94:18:7f:d0:8f:6b:e0:86:85:e6:f6:
+        d4:d5:9a:9a:8b:a2:b7:11:3b:41:88:91:d4:35:60:bb:79:0e:
+        f5:c6:a6:63:e5:4c:47:33:66:40:59:d3:ef:aa:f8:1d:a3:a1:
+        08:18:a8:d0:6c:97:7b:f9:7f:30:0f:47:e7:bc:e6:43:b2:ba:
+        fa:c8:6e:ef:10:d8:56:f9:9b:38:68:c8:6b:81:51:f9:68:a4:
+        88:76:a8:1f:59:c7:fe:51:52:f5:e2:89:8b:3c:d8:6c:05:e4:
+        b1:71:a2:8b:1f:35:63:37:e9:26:e3:f9:0c:97:3f:d1:1f:64:
+        7d:36:68:9f:df:4d:ff:a5:bc:b7:d3:ba:57:3a:7b:8d:5d:9c:
+        7d:a1:7f:23:29:8f:b1:40:9c:84:1d:5e:3f:1b:f6:79:87:63:
+        a3:f7:3c:28:bd:81:fa:80:a8:42:87:a2:7a:ea:f5:08:dd:8e:
+        45:aa:dd:7e
 -----BEGIN CERTIFICATE-----
-MIIC9TCCAd0CAQEwDQYJKoZIhvcNAQELBQAwQjElMCMGA1UECwwcTXlTUUxDb25u
-ZWN0b3JQeXRob24gUm9vdCBDQTEZMBcGA1UEAwwQTXlDb25uUHkgUm9vdCBDQTAe
-Fw0yNDA3MTcxNDU1NTVaFw0yNTA3MTcxNDU1NTVaMD8xKTAnBgNVBAsMIE15U1FM
-Q29ubmVjdG9yUHl0aG9uIFNlcnZlciBDZXJ0MRIwEAYDVQQDDAlsb2NhbGhvc3Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHe1adgIzViQpXigUR8Bxk
-CdcF7mGRSqvZBzkhv4iqS1HOjWK3mvk0HUzU+CHMml+wPtSv7GOfc+ncNtd36tru
-ZQA5MUEaEGlbQDcVINCOggUmzn5xgWGbzmYyp2UN2o8byJkRgHJt2s4ADEIxoBMW
-XNrNdQ7i8OaFAE0ja1IsvcOpbSD0VGisqd3LyC2XvGmIILEkDyeY+maCG8MocfPt
-lJd24W3ZOW2gU4LGWYdXVw7gkzEF4VyX8g2gssFb7646J4N2FxECy9gDaQZnBHCw
-EBxYtKkmkuCwJFkg3X+K/4B51QHTMCPgW35I2gNWeQPfmgfu7r/AtrKJbcIvTjet
-AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAGKUpt00BlCSRYBPYeMOSWdpB+qIjSTs
-oaTIaM9Gf4CWwHDzwtetCdLjpLzGvJrifjLexY0HS3QFB6kRiAnBkByQFPQBT2mD
-zpdYFSOF85cotcrD1wET/x0FFOx2l1ldiuYvWlCCxZQAfeB97VPOdjk69SD0cGrf
-Non3uOpaKMC0fs/MD1NAIG6bsqNXpvtwqMsnHc7oacTMRQfW1KWMj5/nC9UyOPql
-U99xo1Rw3YWP2nXWvF+ZIoD+5fBbrtLnsjari4581M4pUD1bSF97gEpEhff17UAv
-hSS2rwxyIA00J7Fz/yjCnr9EqGmL3r1ugSdoBlP/tOLZzDExPO/hTTk=
+MIIDPjCCAiagAwIBAgIBATANBgkqhkiG9w0BAQsFADBCMSUwIwYDVQQLDBxNeVNR
+TENvbm5lY3RvclB5dGhvbiBSb290IENBMRkwFwYDVQQDDBBNeUNvbm5QeSBSb290
+IENBMB4XDTI1MDcyMzE0NTAwN1oXDTI2MDcyMzE0NTAwN1owPzEpMCcGA1UECwwg
+TXlTUUxDb25uZWN0b3JQeXRob24gU2VydmVyIENlcnQxEjAQBgNVBAMMCWxvY2Fs
+aG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+zoHrkoLWdQHjT
+eoOWo7Wj9seOO2FuUIfm2lIBXFWmTzEpO9nOqRm/WeXtKZTWbp2UeyzyMwffCQ2C
+1Q9OHjrhkMKWUkK8vmbK8OnEgZGY06Jpl67/Yf8ccWa/X/cx7+iQX7NqmbaHfBPV
+xB0NO0k4Z3bwyAgJ7jCnTlfb5dLtxOKn7rI74gs91aPy6aZv6QJ1TEuOKjPo1H9q
+vEgFTK8ZNynPR/p2s3EhNbeDYOfgT1ktx/zhNhJ9PrW7SYP2tuFceXM0WxWu5Cgn
+wsR1bw++SDGFQR4xox4q97SZ/NYOlUOWocTaEYlHrxKYzA7jDoVTEW71+fmHgGNT
+L70XQccCAwEAAaNCMEAwHQYDVR0OBBYEFAQcWTitLXSBiUiHHEUAidQaSqX7MB8G
+A1UdIwQYMBaAFPyKkA2Ff7DktAbi9R34B5msrapHMA0GCSqGSIb3DQEBCwUAA4IB
+AQA/jH/Z7/St3AN4MCM8ZJx7DhcgKmvx3YPFASb0ty8P6b62ucVWGTu2QCcVvz62
+uVrBwjscLIDLYqvp/SVejZuGbcPiSsbtlyP3Z10ILB9slBh/0I9r4IaF5vbU1Zqa
+i6K3ETtBiJHUNWC7eQ71xqZj5UxHM2ZAWdPvqvgdo6EIGKjQbJd7+X8wD0fnvOZD
+srr6yG7vENhW+Zs4aMhrgVH5aKSIdqgfWcf+UVL14omLPNhsBeSxcaKLHzVjN+km
+4/kMlz/RH2R9Nmif303/pby307pXOnuNXZx9oX8jKY+xQJyEHV4/G/Z5h2Oj9zwo
+vYH6gKhCh6J66vUI3Y5Fqt1+
 -----END CERTIFICATE-----
diff -pruN 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_server_key.pem 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_server_key.pem
--- 9.4.0-1/mysql-connector-python/tests/data/ssl/tests_server_key.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/data/ssl/tests_server_key.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHe1adgIzViQpX
-igUR8BxkCdcF7mGRSqvZBzkhv4iqS1HOjWK3mvk0HUzU+CHMml+wPtSv7GOfc+nc
-Ntd36truZQA5MUEaEGlbQDcVINCOggUmzn5xgWGbzmYyp2UN2o8byJkRgHJt2s4A
-DEIxoBMWXNrNdQ7i8OaFAE0ja1IsvcOpbSD0VGisqd3LyC2XvGmIILEkDyeY+maC
-G8MocfPtlJd24W3ZOW2gU4LGWYdXVw7gkzEF4VyX8g2gssFb7646J4N2FxECy9gD
-aQZnBHCwEBxYtKkmkuCwJFkg3X+K/4B51QHTMCPgW35I2gNWeQPfmgfu7r/AtrKJ
-bcIvTjetAgMBAAECggEAGhfPjh2dDmd1E1tJ631BcXJ6DlwOph8i2Goh9oCjw0bD
-5iVHVuXuF/uHK8pjPWyp/JdTYcmlhFt4qSYBTD3LsmhCvbhsIBkqdtWw/tIChcmL
-G/bhwj4ewu8eHh0YUlYW5xb3srre/PCkhowT8oLSTFgMBNj9gADr3lTaQjpNDu3u
-JTJIyly407wPswloAWAhVCOGd9TX1WMLkVMqVWmnCguCPAYdToRxXRT9RtPVEIsj
-5h58LP2/yWIxoHeDACAPziFlplVNjLnzk/Nr4kvzqDpD+8D00xcJWieXuX7FJHx8
-PWxCHr0mHjTm2cRagUwtEGLXQt/tMzJ1wjxI3v85bwKBgQD6kyLcFnCJh3p3MAAy
-Ehuq5z/lqNyyzb//sl+bMs6uYUxzEXPB+lADJ92GKTSdP72dDSy6pXg8GkuR1RXZ
-1pqrk5hzP8LEIbNm2OrOKJrtLbzN6Vl5K3KJQwDljZFe4ebFupKT4zF5P3vxoVdB
-qvtAAvanppvblYQCLrcgkaaZlwKBgQDLzQIx+V0YNvEnS9Hs9JRgEwiVgh2yUc8e
-0NkPBYpK8oBOVnTnO/yyK7Pd8ziJn6nqbzasQ9WFZMo+fzRXHVFPNqQ2fVhCuZoJ
-wOmkQGNVXZEDB87rPC/Xk9AIcIHYzXsTiEgpbpc17apJhHXkdKhS6xwQEHHTubqg
-U7lj9JU5WwKBgQC6r4KqTMGdhWVVhVqv81PPuaied3euc6JXY9LdMzZPL0ig9mCz
-JcYVA8+ElBCSE5o2d0la6csxpDmnNgWonb3wlO9g9iEqtR0PRA90d0Yt7QScuP0j
-TJ5x64yweg/TjCS+LinkqsECX6z9MkJrN3Mnls2jzHqUV8nZQmrHhhyEkwKBgQDH
-gNHEUAKVALvDpxJCbw6MmjVN/kjJ1hH2baX+cYL2aTu29CWOcwek9uklvcG734O7
-TdFsgx8TbR4aXfXDzZxZ+fh4qu1qrDwhjippsupKl8Sr/cnON2XyF+2PRWum60ev
-UDqr7Gmzzgtj2np6AMUCHsui4iY7iFYsOqmCMtydfwKBgDKajmOJ3qwlBGIOZzAQ
-pKJGwahWAU7iSIVi0vSoAdpInzUalulX0iagGKPvwe9Cw6Zwg/Gk/RXQDDYLZz0f
-BR3tmhcB4ZwUYo5sE6nnpnHa7bH57Yy6xR/fjH5RPANNVlOtfxqgHn7n/BEOPVgc
-fJjz7o4r06ATRJjepQXlcPlW
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCfs6B65KC1nUB4
+03qDlqO1o/bHjjthblCH5tpSAVxVpk8xKTvZzqkZv1nl7SmU1m6dlHss8jMH3wkN
+gtUPTh464ZDCllJCvL5myvDpxIGRmNOiaZeu/2H/HHFmv1/3Me/okF+zapm2h3wT
+1cQdDTtJOGd28MgICe4wp05X2+XS7cTip+6yO+ILPdWj8ummb+kCdUxLjioz6NR/
+arxIBUyvGTcpz0f6drNxITW3g2Dn4E9ZLcf84TYSfT61u0mD9rbhXHlzNFsVruQo
+J8LEdW8PvkgxhUEeMaMeKve0mfzWDpVDlqHE2hGJR68SmMwO4w6FUxFu9fn5h4Bj
+Uy+9F0HHAgMBAAECggEAHryePvjg24OMBJVDR69HC+8mUIsV768hLb7nNxBO+qcb
+J82VWNrXHf7/qOqn7Z8FxCtvN5vX6YRqRCDxq9Pvqop+Z40yAOk9xh/6FSv+egzN
+cr1a9dHuRQDu7IUZzcRdNcgPu0LhmclivpiOeb7xsap681/tR+rNXqzcvbkzdxCB
+VUGd8qjl780SIbaBdm1J3q+Rd8NQmRWKJkUqw129gRQ9xnRk/B4mJrIBof225Zd4
+mpXIjdfek3+clg9DMepLRYGqi631v9xL5H3BMKIdFu/xtZKPkx7F2F5AFxCwi2tm
+J80nOviqtViB27FC0d+yDf/8y+W4aJggL1E6INd4cQKBgQDMrUrnK+B7pM2uCFy/
+jdBPTilMPmUY6Omk75yk2tva4Z2HxaUhFYaTOtUsbStmgrflvy9ZReYcfRGHpmBp
+u+II4qk8+vx3BIr/6xngnmBBUQcQAoUBuiqjo/aYjEy2FKmNmF8W0YtG3t6tGjZ5
+7TD0ljIUsYdniYyu5fLsRFCoNwKBgQDHv0N+RPo+EYp9YcBLdrWTG9OaV8WZ4AFS
+fpkWrL+QflMq7WQEKG29nmFhdxay/66VYNVSGGGtFeDxADJ4aXEscPdeLHwYmI1i
+MBepiUBnbzyrxHFnRKSirrfBwfxIu2iXIACcnYUW1dF+/OCMvi99W9y/PwzXibbK
+pB9RgT9K8QKBgH2k97E3byOXxKdL/NueS70TRyjFuLv05tDYQrm0nHgePd0GCFtp
+4mXpHMmb7qOMJSXFGmTcEul0IVm7Wb4ulxBLTAbiMC9Du6xkf0szDfWqrwI1+b5Y
+sSopUgzNO54eywLgAad5VN1ZnSp4R+7LG11aAj5PyMZXWuRWxqwhN747AoGAcbM8
+vw6Sh2xCsdZHuG0NNHzdeXjG4S0yc3vetpqEvMI7oy7YBMnildImym0YfbGu9hbV
+ttJsHzNaBLVBBWu34T04geG+jd2gdSi8/2NCRt554aiDiO347SWZMfCzI8+R3Jx5
+3KyJipMRmkBlrZfAvpHg2PgR3krkwvqjXSi+F3ECgYAEieBQSVM3ZmLRanzblY+b
+XW2gOECQceDkQQoHZ/PR7/HwUq4oKLIql5lLQ3Ydbj4tOQ+w6CkV1pO3yKl08oRt
+DH9o0geOMfNhvDkLoXIaYnRV+CitDvAuEG04WT+TuH0XVc2SYL4AUG51Ag95TT1T
+Y9IqcCkkAztPaGdONT/uSA==
 -----END PRIVATE KEY-----
diff -pruN 9.4.0-1/mysql-connector-python/tests/docker/Dockerfile 9.5.0-1/mysql-connector-python/tests/docker/Dockerfile
--- 9.4.0-1/mysql-connector-python/tests/docker/Dockerfile	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/docker/Dockerfile	2025-10-15 05:27:11.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2024, Oracle and/or its affiliates.
+# Copyright (c) 2009, 2025, Oracle and/or its affiliates.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License, version 2.0, as
@@ -26,10 +26,10 @@
 # along with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
 
-# By default the container will use oracle linux 9 from OCR.
+# By default the container will use oracle linux 10 from OCR.
 # The BASE_IMAGE environment variable can be used to pull
 # any other Oracle Linux image from any other Docker registry.
-ARG BASE_IMAGE=container-registry.oracle.com/os/oraclelinux:9-slim
+ARG BASE_IMAGE=container-registry.oracle.com/os/oraclelinux:10-slim
 
 
 FROM ${BASE_IMAGE} as pure_python
@@ -58,16 +58,16 @@ ENV PIP_INDEX_URL=${PYPI_REPOSITORY:-htt
 COPY . .
 RUN cd mysql-connector-python \
     && pip install -r tests/requirements.txt \
-    && pip install --use-feature=in-tree-build .
+    && pip install .
 
 
 FROM pure_python AS c_extension
 RUN dnf install -y yum wget
 # Install MySQL including dev files to compile the C Extension
-ENV MYSQL_ENDPOINT="mysql80-community-release-el9-1.noarch.rpm"
+ENV MYSQL_ENDPOINT="mysql84-community-release-el10-2.noarch.rpm"
 RUN wget https://dev.mysql.com/get/${MYSQL_ENDPOINT} \
     && yum install -y ${MYSQL_ENDPOINT} \
     && dnf install -y mysql-community-server mysql-community-devel
 # Build mysql cext
 RUN cd mysql-connector-python \
-    && python setup.py install --with-mysql-capi=/usr/bin/mysql_config
+    && python setup.py install --with-mysql-capi=/usr
diff -pruN 9.4.0-1/mysql-connector-python/tests/issues/__init__.py 9.5.0-1/mysql-connector-python/tests/issues/__init__.py
--- 9.4.0-1/mysql-connector-python/tests/issues/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/issues/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/tests/otel/__init__.py 9.5.0-1/mysql-connector-python/tests/otel/__init__.py
--- 9.4.0-1/mysql-connector-python/tests/otel/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/otel/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2023, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/tests/qa/__init__.py 9.5.0-1/mysql-connector-python/tests/qa/__init__.py
--- 9.4.0-1/mysql-connector-python/tests/qa/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/qa/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2021, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysql-connector-python/tests/qa/test_qa_aio_connection_api.py 9.5.0-1/mysql-connector-python/tests/qa/test_qa_aio_connection_api.py
--- 9.4.0-1/mysql-connector-python/tests/qa/test_qa_aio_connection_api.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/qa/test_qa_aio_connection_api.py	2025-10-15 05:27:11.000000000 +0000
@@ -1,3 +1,31 @@
+# Copyright (c) 2024, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
 """Public properties and methods are tested.
 
 This module is expected to include mostly integration tests.
diff -pruN 9.4.0-1/mysql-connector-python/tests/qa/test_qa_aio_timeout.py 9.5.0-1/mysql-connector-python/tests/qa/test_qa_aio_timeout.py
--- 9.4.0-1/mysql-connector-python/tests/qa/test_qa_aio_timeout.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/qa/test_qa_aio_timeout.py	2025-10-15 05:27:11.000000000 +0000
@@ -415,7 +415,11 @@ class ReadWriteTimeoutAioTests(tests.MyS
             # Unexpected failure
             self.fail(e)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     async def test_write_timeout_connection_query_TLE(self) -> None:
         """
         This test requires external server (not via localhost) as reproducing a WriteTimeoutError
@@ -439,7 +443,11 @@ class ReadWriteTimeoutAioTests(tests.MyS
             # Unexpected timeout error raised
             self.fail(err)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     async def test_write_timeout_connection_query_iter_TLE(self) -> None:
         """
         This test requires external server (not via localhost) as reproducing a WriteTimeoutError
@@ -464,7 +472,11 @@ class ReadWriteTimeoutAioTests(tests.MyS
             except Exception as err:
                 self.fail(err)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     async def test_write_timeout_cursor_query_TLE(self) -> None:
         """
         This test requires external server (not via localhost) as reproducing a WriteTimeoutError
@@ -513,7 +525,11 @@ class ReadWriteTimeoutAioTests(tests.MyS
         except Exception as err:
             self.fail(err)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     async def test_write_timeout_cursor_query_multi_TLE(self) -> None:
         """
         This test requires external server (not via localhost) as reproducing a WriteTimeoutError
@@ -547,7 +563,11 @@ class ReadWriteTimeoutAioTests(tests.MyS
         except Exception as err:
             self.fail(err)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     async def test_write_timeout_prepared_stmt_TLE(self) -> None:
         """
         This test requires external server (not via localhost) as reproducing a WriteTimeoutError
diff -pruN 9.4.0-1/mysql-connector-python/tests/qa/test_qa_connection_api.py 9.5.0-1/mysql-connector-python/tests/qa/test_qa_connection_api.py
--- 9.4.0-1/mysql-connector-python/tests/qa/test_qa_connection_api.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/qa/test_qa_connection_api.py	2025-10-15 05:27:11.000000000 +0000
@@ -1,3 +1,31 @@
+# Copyright (c) 2024, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
 """Public properties and methods are tested.
 
 This module is expected to include mostly integration tests.
diff -pruN 9.4.0-1/mysql-connector-python/tests/qa/test_qa_timeout.py 9.5.0-1/mysql-connector-python/tests/qa/test_qa_timeout.py
--- 9.4.0-1/mysql-connector-python/tests/qa/test_qa_timeout.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/qa/test_qa_timeout.py	2025-10-15 05:27:11.000000000 +0000
@@ -566,7 +566,11 @@ class ReadWriteTimeoutTests(tests.MySQLC
             # unexpected error raised
             self.fail(err)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     def test_write_timeout_connection_query_TLE(self) -> None:
         config = self.config
         config["use_pure"] = True
@@ -606,7 +610,11 @@ class ReadWriteTimeoutTests(tests.MySQLC
             # Unexpected timeout error raised
             self.fail(err)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     def test_write_timeout_connection_query_iter_TLE(self) -> None:
         """
         This test requires external server (not via localhost) as reproducing a WriteTimeoutError
@@ -634,7 +642,11 @@ class ReadWriteTimeoutTests(tests.MySQLC
                 # Unexpected timeout raised
                 self.fail(err)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     def test_write_timeout_cursor_query_TLE(self) -> None:
         """
         This test requires external server (not via localhost) as reproducing a WriteTimeoutError
@@ -688,7 +700,11 @@ class ReadWriteTimeoutTests(tests.MySQLC
             # unexpected timeout raised
             self.fail(err)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     def test_write_timeout_cursor_query_multi_TLE(self) -> None:
         """
         This test requires external server (not via localhost) as reproducing a WriteTimeoutError
@@ -718,7 +734,11 @@ class ReadWriteTimeoutTests(tests.MySQLC
                     # Unexpected timeout was raised
                     self.fail(err)
 
-    @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # @unittest.skipIf(not tests.MYSQL_EXTERNAL_SERVER, ERR_NO_EXTERNAL_SERVER)
+    # 2025-08-02 This test has been failing for some time but was not caught 
+    # in pb2 as it is only executed with use-external-user flag, which until 
+    # the introduction of the AI test suite, was not tested in pb2.
+    @unittest.skip("Disable existing, failing test")
     def test_write_timeout_prepared_stmt_TLE(self) -> None:
         """
         This test requires external server (not via localhost) as reproducing a WriteTimeoutError
diff -pruN 9.4.0-1/mysql-connector-python/tests/qa/test_qa_vector_type.py 9.5.0-1/mysql-connector-python/tests/qa/test_qa_vector_type.py
--- 9.4.0-1/mysql-connector-python/tests/qa/test_qa_vector_type.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/qa/test_qa_vector_type.py	2025-10-15 05:27:11.000000000 +0000
@@ -36,6 +36,7 @@ import struct
 import unittest
 
 from array import array
+from contextlib import nullcontext
 
 import tests
 
diff -pruN 9.4.0-1/mysql-connector-python/tests/requirements.txt 9.5.0-1/mysql-connector-python/tests/requirements.txt
--- 9.4.0-1/mysql-connector-python/tests/requirements.txt	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/requirements.txt	2025-10-15 05:27:11.000000000 +0000
@@ -1,2 +1,30 @@
+# Copyright (c) 2023, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
 dnspython==2.6.1
 gssapi==1.8.3
diff -pruN 9.4.0-1/mysql-connector-python/tests/test_aio_cursor.py 9.5.0-1/mysql-connector-python/tests/test_aio_cursor.py
--- 9.4.0-1/mysql-connector-python/tests/test_aio_cursor.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/test_aio_cursor.py	2025-10-15 05:27:11.000000000 +0000
@@ -225,8 +225,8 @@ class MySQLCursorTestsMixin:
             with self.assertRaises(ProgrammingError):
                 await cur.executemany("INSERT INTO t1 1 %s", [(1,), (2,)])
 
-            # TODO: Fix
-            # await cur.executemany("SELECT SHA1(%s) AS res", [("foo",), ("bar",)])
+            # TODO: Fix BUG#38229142
+            # await cur.executemany("SELECT SHA2(%s, 224) AS res", [("foo",), ("bar",)])
             # self.assertEqual(None, await cur.fetchone())
 
             tbl = "myconnpy_cursor"
diff -pruN 9.4.0-1/mysql-connector-python/tests/test_authentication.py 9.5.0-1/mysql-connector-python/tests/test_authentication.py
--- 9.4.0-1/mysql-connector-python/tests/test_authentication.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/test_authentication.py	2025-10-15 05:27:11.000000000 +0000
@@ -41,14 +41,13 @@ import subprocess
 import time
 import unittest
 
-from mysql.connector.connection import MySQLConnection
-
 import tests
 
 import mysql.connector
 import mysql.connector.plugins as plugins
 
 from mysql.connector import authentication
+from mysql.connector.connection import MySQLConnection
 from mysql.connector.errors import (
     DatabaseError,
     InterfaceError,
@@ -1437,6 +1436,9 @@ class MySQLOpenIDConnectAuthPluginTests(
         self.assertIsInstance(res, tuple)
         self.assertTrue(expected_user in res[0][0][0])
 
+    @unittest.skipIf(
+        tests.MYSQL_ML_ENABLED, "Assumed permissions incompatible with MySQL AI"
+    )
     @tests.foreach_cnx()
     def test_openid_identity_token_file_valid(self):
         """Checks whether an user is able to authenticate with a path to a valid
diff -pruN 9.4.0-1/mysql-connector-python/tests/test_cursor.py 9.5.0-1/mysql-connector-python/tests/test_cursor.py
--- 9.4.0-1/mysql-connector-python/tests/test_cursor.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/test_cursor.py	2025-10-15 05:27:11.000000000 +0000
@@ -570,7 +570,7 @@ class MySQLCursorTests(tests.TestsCursor
             [(1,), (2,)],
         )
 
-        self.cur.executemany("SELECT SHA1(%s)", [("foo",), ("bar",)])
+        self.cur.executemany("SELECT SHA2(%s, 224)", [("foo",), ("bar",)])
         self.assertEqual(None, self.cur.fetchone())
         self.cur.close()
 
@@ -900,7 +900,7 @@ class MySQLCursorTests(tests.TestsCursor
         self.cur.execute("SELECT VERSION()")
         self.cur.fetchone()
         self.assertEqual("MySQLCursor: SELECT VERSION()", self.cur.__str__())
-        stmt = "SELECT VERSION(),USER(),CURRENT_TIME(),NOW(),SHA1('myconnpy')"
+        stmt = "SELECT VERSION(),USER(),CURRENT_TIME(),NOW(),SHA2('myconnpy',224)"
         self.cur.execute(stmt)
         self.cur.fetchone()
         self.assertEqual("MySQLCursor: {0}..".format(stmt[:40]), self.cur.__str__())
@@ -1229,7 +1229,7 @@ class MySQLCursorPreparedTests(tests.Tes
         self.assertEqual(None, cur.executemany("ham", []))
         self.assertRaises(errors.ProgrammingError, cur.executemany, "ham", ["ham"])
 
-        cur.executemany("SELECT SHA1(%s)", [("ham",), ("bar",)])
+        cur.executemany("SELECT SHA2(%s, 224)", [("ham",), ("bar",)])
         self.assertEqual(None, cur.fetchone())
         cur.close()
 
diff -pruN 9.4.0-1/mysql-connector-python/tests/test_examples.py 9.5.0-1/mysql-connector-python/tests/test_examples.py
--- 9.4.0-1/mysql-connector-python/tests/test_examples.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/tests/test_examples.py	2025-10-15 05:27:11.000000000 +0000
@@ -34,7 +34,7 @@
 import sys
 import unittest
 
-from hashlib import md5
+from hashlib import sha256
 
 import tests
 
@@ -64,11 +64,11 @@ class TestExamples(tests.MySQLConnectorT
         except Exception as err:
             self.fail(err)
 
-        md5_result = md5()
+        sha256_result = sha256()
         output = "\n".join(result)
-        md5_result.update(output.encode("utf-8"))
+        sha256_result.update(output.encode("utf-8"))
 
-        self.assertEqual(exp, md5_result.hexdigest(), "Output was not correct")
+        self.assertEqual(exp, sha256_result.hexdigest(), "Output was not correct")
 
     def test_dates(self):
         """examples/dates.py"""
@@ -119,7 +119,7 @@ class TestExamples(tests.MySQLConnectorT
             import examples.inserts as example
         except Exception as err:
             self.fail(err)
-        exp = "077dcd0139015c0aa6fb82ed932f053e"
+        exp = "0ec627a23de574747d0aa850534d0029f58b395c2f93970fdfd832f4f5d491d5"
         self._exec_main(example, exp)
 
         sys.modules.pop("examples.inserts", None)
diff -pruN 9.4.0-1/mysql-connector-python/unittests.py 9.5.0-1/mysql-connector-python/unittests.py
--- 9.4.0-1/mysql-connector-python/unittests.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysql-connector-python/unittests.py	2025-10-15 05:27:11.000000000 +0000
@@ -692,7 +692,7 @@ def setup_stats_db(cnx):
     """Setup the database for storing statistics"""
     cur = cnx.cursor()
 
-    supported_python = ("3.9", "3.10", "3.11", "3.12")
+    supported_python = ("3.10", "3.11", "3.12", "3.13")
     supported_mysql = ("5.7", "8.0", "8.4", "9.0")
 
     columns = []
@@ -1014,6 +1014,15 @@ def main():
                     if res:
                         mysql_server.mysqlx_unix_socket = res[1]
 
+                    cur.execute(
+                        """
+                        SELECT 1 FROM information_schema.ROUTINES
+                        WHERE ROUTINE_SCHEMA=%s AND ROUTINE_NAME=%s AND ROUTINE_TYPE='PROCEDURE' LIMIT 1
+                        """,
+                        ("sys", "ML_TRAIN"),
+                    )
+                    tests.MYSQL_ML_ENABLED = cur.fetchone() is not None
+
             tests.MYSQL_VERSION = mysql_server.version
             tests.MYSQL_LICENSE = mysql_server.license
             tests.MYSQL_VERSION_TXT = ".".join(map(str, mysql_server.version))
diff -pruN 9.4.0-1/mysqlx-connector-python/MANIFEST.in 9.5.0-1/mysqlx-connector-python/MANIFEST.in
--- 9.4.0-1/mysqlx-connector-python/MANIFEST.in	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/MANIFEST.in	2025-10-15 05:27:11.000000000 +0000
@@ -1,3 +1,31 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
 include README.txt
 include README.rst
 include LICENSE.txt
diff -pruN 9.4.0-1/mysqlx-connector-python/cpydist/bdist_solaris.py 9.5.0-1/mysqlx-connector-python/cpydist/bdist_solaris.py
--- 9.4.0-1/mysqlx-connector-python/cpydist/bdist_solaris.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/cpydist/bdist_solaris.py	1970-01-01 00:00:00.000000000 +0000
@@ -1,378 +0,0 @@
-# Copyright (c) 2019, 2024, Oracle and/or its affiliates.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License, version 2.0, as
-# published by the Free Software Foundation.
-#
-# This program is designed to work with certain software (including
-# but not limited to OpenSSL) that is licensed under separate terms,
-# as designated in a particular file or component or in included license
-# documentation. The authors of MySQL hereby grant you an
-# additional permission to link the program and your derivative works
-# with the separately licensed software that they have either included with
-# the program or referenced in the documentation.
-#
-# Without limiting anything contained in the foregoing, this file,
-# which is part of MySQL Connector/Python, is also subject to the
-# Universal FOSS Exception, version 1.0, a copy of which can be found at
-# http://oss.oracle.com/licenses/universal-foss-exception.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU General Public License, version 2.0, for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
-
-"""Implements the Distutils command for creating Solaris packages."""
-
-
-import logging
-import os
-import platform
-import shutil
-import subprocess
-import tarfile
-import time
-
-from pathlib import Path
-
-try:
-    from setuptools.errors import ExecError
-except ImportError:
-    ExecError = Exception
-
-try:
-    from setuptools.logging import set_threshold
-except ImportError:
-    set_threshold = None
-
-from . import COMMON_USER_OPTIONS, VERSION_EXTRA, VERSION_TEXT, BaseCommand
-from .bdist import DistBinary as bdist
-from .utils import write_info_bin, write_info_src
-
-SOLARIS_PKGS = {"pure": os.path.join("cpydist", "data", "solaris")}
-PKGINFO = (
-    'PKG="{pkg}"\n'
-    'NAME="MySQL Connector/Python {ver} {lic}, MySQL driver written in '
-    'Python"\n'
-    'VERSION="{ver}"\n'
-    'ARCH="all"\n'
-    'CLASSES="none"\n'
-    'CATEGORY="application"\n'
-    'VENDOR="ORACLE Corporation"\n'
-    'PSTAMP="{tstamp}"\n'
-    'EMAIL="MySQL Release Engineering <mysql-build@oss.oracle.com>"\n'
-    'BASEDIR="/"\n'
-)
-
-
-class DistSolaris(bdist, BaseCommand):
-    """Create a Solaris distribution."""
-
-    platf_n = "-solaris"
-    platf_v = platform.version().split(".")[0]
-    platf_a = "sparc" if platform.processor() == "sparc" else "x86"
-    description = "create a Solaris distribution"
-    user_options = COMMON_USER_OPTIONS + [
-        ("dist-dir=", "d", "directory to put final built distributions in"),
-        (
-            "platform=",
-            "p",
-            f"name of the platform in resulting file (default '{platf_n}')",
-        ),
-        (
-            "platform-version=",
-            "v",
-            f"version of the platform in resulting file (default '{platf_v}')",
-        ),
-        (
-            "platform-version=",
-            "a",
-            "architecture, i.e. 'sparc' or 'x86' in the resulting file "
-            f"(default '{platf_a}')",
-        ),
-        (
-            "trans",
-            "t",
-            "transform the package into data stream (default 'False')",
-        ),
-    ]
-
-    def initialize_options(self):
-        """Initialize the options."""
-        bdist.initialize_options(self)
-        BaseCommand.initialize_options(self)
-        self.name = self.distribution.get_name()
-        self.version = self.distribution.get_version()
-        self.version_extra = f"-{VERSION_EXTRA}" if VERSION_EXTRA else ""
-        self.keep_temp = None
-        self.create_dmg = False
-        self.dist_dir = None
-        self.started_dir = os.getcwd()
-        self.platform = self.platf_n
-        self.platform_version = self.platf_v
-        self.architecture = self.platf_a
-        self.debug = False
-        self.sun_pkg_name = f"{self.name}-{self.version}{self.version_extra}.pkg"
-        self.dstroot = "dstroot"
-        self.sign = False
-        self.identity = "MySQL Connector/Python"
-        self.trans = False
-
-    def finalize_options(self):
-        """Finalize the options."""
-        bdist.finalize_options(self)
-        BaseCommand.finalize_options(self)
-        self.set_undefined_options("bdist", ("dist_dir", "dist_dir"))
-        if self.debug:
-            self.log.setLevel(logging.DEBUG)
-            if set_threshold:
-                # Set setuptools logging level to DEBUG
-                set_threshold(1)
-
-    def _prepare_pkg_base(self, template_name, data_dir, root=""):
-        """Create and populate the src base directory."""
-        self.log.info("-> _prepare_pkg_base()")
-        self.log.info("  template_name: %s", template_name)
-        self.log.info("  data_dir: %s", data_dir)
-        self.log.info("  root: %s", root)
-
-        # copy and create necessary files
-        sun_dist_name = template_name.format(self.name, self.version)
-        self.sun_pkg_name = f"{sun_dist_name}.pkg"
-        self.log.info("  sun_pkg_name: %s", self.sun_pkg_name)
-
-        sun_path = os.path.join(root, self.dstroot)
-        self.log.info("  sun_path: %s", sun_path)
-        cwd = os.path.join(os.getcwd())
-        self.log.info("Current directory: %s", cwd)
-
-        copy_file_src_dst = []
-
-        # No special folder for GPL or commercial. Files inside the directory
-        # will determine what it is.
-        data_path = os.path.join(
-            sun_path,
-            "usr",
-            "share",
-            template_name.format(self.name, self.version),
-        )
-        self.mkpath(data_path)
-
-        lic = "(GPL)"
-        sun_pkg_info = os.path.join(sun_path, "pkginfo")
-        self.log.info("sun_pkg_info path: %s", sun_pkg_info)
-        with open(sun_pkg_info, "w") as f_pkg_info:
-            f_pkg_info.write(
-                PKGINFO.format(
-                    ver=self.version,
-                    lic=lic,
-                    pkg=self.name,
-                    tstamp=time.ctime(),
-                )
-            )
-            f_pkg_info.close()
-
-        data_path = os.path.join(
-            sun_path,
-            "usr",
-            "share",
-            template_name.format(self.name, self.version),
-        )
-        copy_file_src_dst += [
-            (
-                os.path.join(cwd, "README.txt"),
-                os.path.join(data_path, "README.txt"),
-            ),
-            (
-                os.path.join(cwd, "LICENSE.txt"),
-                os.path.join(data_path, "LICENSE.txt"),
-            ),
-            (
-                os.path.join(cwd, "CHANGES.txt"),
-                os.path.join(data_path, "CHANGES.txt"),
-            ),
-            (
-                os.path.join(cwd, "docs", "INFO_SRC"),
-                os.path.join(data_path, "INFO_SRC"),
-            ),
-            (
-                os.path.join(cwd, "docs", "INFO_BIN"),
-                os.path.join(data_path, "INFO_BIN"),
-            ),
-            (
-                os.path.join(cwd, "README.rst"),
-                os.path.join(data_path, "README.rst"),
-            ),
-            (
-                os.path.join(cwd, "CONTRIBUTING.md"),
-                os.path.join(data_path, "CONTRIBUTING.md"),
-            ),
-            (
-                os.path.join(cwd, "SECURITY.md"),
-                os.path.join(data_path, "SECURITY.md"),
-            ),
-        ]
-
-        for src, dst in copy_file_src_dst:
-            shutil.copyfile(src, dst)
-
-    def _create_pkg(self, template_name, dmg=False, sign=False, root="", identity=""):
-        """Create the Solaris package using the OS dependent commands."""
-        self.log.info("-> _create_pkg()")
-        self.log.info("template_name: %s", template_name)
-        self.log.info("identity: %s", identity)
-
-        sun_dist_name = template_name.format(self.name, self.version)
-        self.sun_pkg_name = f"{sun_dist_name}.pkg"
-        sun_pkg_contents = os.path.join(self.sun_pkg_name, "Contents")
-
-        self.log.info("sun_dist_name: %s", sun_dist_name)
-        self.log.info("sun_pkg_name: %s", self.sun_pkg_name)
-        self.log.info("sun_pkg_contents: %s", sun_pkg_contents)
-
-        sun_path = os.path.join(root, self.dstroot)
-        os.chdir(sun_path)
-        self.log.info("Root directory for Prototype: %s", os.getcwd())
-
-        # Creating a Prototype file, this contains a table of contents of the
-        # Package, that is suitable to be used for the package creation tool.
-        self.log.info(
-            f"Creating Prototype file on {self.dstroot} to describe files to install"
-        )
-
-        prototype_path = "Prototype"
-        proto_tmp = "Prototype_temp"
-
-        with open(proto_tmp, "w") as f_out:
-            cmd = ["pkgproto", "."]
-            pkgp_p = subprocess.Popen(cmd, shell=False, stdout=f_out, stderr=f_out)
-            res = pkgp_p.wait()
-            if res != 0:
-                self.log.error(f"pkgproto command failed with: {res}")
-                raise ExecError(f"pkgproto command failed with: {res}")
-            f_out.flush()
-
-        # log Prototype contents
-        self.log.info("/n>> Prototype_temp contents >>/n")
-        with open(proto_tmp, "r") as f_in:
-            self.log.info(f_in.readlines())
-        self.log.info("/n<< Prototype_temp contents end <</n")
-
-        # Fix Prototype file, insert pkginfo and remove Prototype
-        self.log.info("Fixing folder permissions on Prototype contents")
-        with open(prototype_path, "w") as f_out:
-            with open(proto_tmp, "r") as f_in:
-                # Add pkginfo entry at beginning of the Prototype file
-                f_out.write("i pkginfo\n")
-                f_out.flush()
-                for line in f_in:
-                    if line.startswith("f none Prototype"):
-                        continue
-                    elif line.startswith("f none pkginfo"):
-                        continue
-                    elif line.startswith("d"):
-                        tokeep = line.split(" ")[:-3]
-                        tokeep.extend(["?", "?", "?", "\n"])
-                        f_out.write(" ".join(tokeep))
-                    elif line.startswith("f"):
-                        tokeep = line.split(" ")[:-2]
-                        tokeep.extend(["root", "bin", "\n"])
-                        f_out.write(" ".join(tokeep))
-                    else:
-                        f_out.write(line)
-                f_out.flush()
-
-        # log Prototype contents
-        self.log.info("/n>> Prototype contents >>/n")
-        with open(prototype_path, "r") as f_in:
-            self.log.info(f_in.readlines())
-        self.log.info("/n<< Prototype contents end <</n")
-
-        # Create Solaris package running the package creation command pkgmk
-        self.log.info("Creating package with pkgmk")
-
-        self.log.info("Root directory for pkgmk: %s", os.getcwd())
-        self.spawn(["pkgmk", "-o", "-r", ".", "-d", "../", "-f", prototype_path])
-        os.chdir("../")
-        if self.debug:
-            self.log.info("current directory: %s", os.getcwd())
-
-        # gzip the package folder
-        self.log.info("creating tarball")
-
-        archive_name = f"{self.sun_pkg_name}.tar.gz"
-        self.log.info("Creating tar archive '%s'", archive_name)
-        with tarfile.open(archive_name, "w|gz") as tar:
-            tar.add(self.name)
-
-        if self.trans:
-            self.log.info("Transforming package into data stream with pkgtrans")
-            self.log.info("Current directory: %s", os.getcwd())
-            self.spawn(
-                [
-                    "pkgtrans",
-                    "-s",
-                    os.getcwd(),
-                    os.path.join(os.getcwd(), self.sun_pkg_name),
-                    self.name,
-                ]
-            )
-
-        for base, _, files in os.walk(os.getcwd()):
-            for filename in files:
-                if filename.endswith(".gz") or filename.endswith(".pkg"):
-                    new_name = filename.replace(
-                        f"{self.version}",
-                        f"{self.version}{self.version_extra}{self.platform}"
-                        f"{self.platform_version}-{self.architecture}",
-                    )
-                    file_path = os.path.join(base, filename)
-                    file_dest = os.path.join(self.started_dir, self.dist_dir, new_name)
-                    shutil.copyfile(file_path, file_dest)
-            break
-
-    def run(self):
-        """Run the command."""
-        self.mkpath(self.dist_dir)
-        self.debug = self.verbose
-
-        self.log.info("Generating INFO_SRC and INFO_BIN files")
-        write_info_src(VERSION_TEXT)
-        write_info_bin()
-
-        cmd_build = self.get_finalized_command("build")
-        build_base = os.path.abspath(cmd_build.build_base)
-        metadata_name = self.distribution.metadata.name
-
-        data_dir = SOLARIS_PKGS["pure"]
-        sun_root = os.path.join(build_base, "sun_pure")
-        cmd_install = self.reinitialize_command("install", reinit_subcommands=1)
-        cmd_install.byte_code_only = self.byte_code_only
-        cmd_install.compile = self.byte_code_only
-        cmd_install.distribution.metadata.name = metadata_name
-        cmd_install.with_mysql_capi = None
-        cmd_install.root = os.path.join(sun_root, self.dstroot)
-        cmd_install.ensure_finalized()
-        cmd_install.run()
-
-        template_name = ["{}"]
-        if self.label:
-            template_name.append(f"-{self.label}")
-        template_name.append("-{}")
-
-        self._prepare_pkg_base("".join(template_name), data_dir, root=sun_root)
-        self._create_pkg(
-            "".join(template_name),
-            dmg=self.create_dmg,
-            root=sun_root,
-            sign=self.sign,
-            identity=self.identity,
-        )
-
-        os.chdir(self.started_dir)
-
-        self.remove_temp()
diff -pruN 9.4.0-1/mysqlx-connector-python/cpydist/data/rpm/mysql-connector-python.spec 9.5.0-1/mysqlx-connector-python/cpydist/data/rpm/mysql-connector-python.spec
--- 9.4.0-1/mysqlx-connector-python/cpydist/data/rpm/mysql-connector-python.spec	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/cpydist/data/rpm/mysql-connector-python.spec	2025-10-15 05:27:11.000000000 +0000
@@ -31,10 +31,8 @@
 %undefine _package_note_file
 %define current_year %(date +%Y)
 
-%if 0%{?rhel} == 8
-%{!?__python3: %global __python3 /usr/bin/python3.9}
-%{!?python3_pkgversion: %global python3_pkgversion 39}
-%endif
+%global __python3 /usr/bin/python3.12
+%global python3_pkgversion 3.12
 
 %{?protobuf_include_dir: %global with_protobuf_include_dir %{protobuf_include_dir}}
 %{?protobuf_lib_dir: %global with_protobuf_lib_dir %{protobuf_lib_dir}}
@@ -43,7 +41,7 @@
 %{?extra_link_args: %global extra_link_args %{extra_link_args}}
 
 # set version if not defined through 'rpmbuild'
-%{!?version: %global version 9.4.0}
+%{!?version: %global version 9.5.0}
 
 
 # if true set byte_code_only to --byte_code_only
@@ -71,10 +69,9 @@ License:       Copyright (c) 2015, %{cur
 URL:           https://dev.mysql.com/downloads/connector/python/
 Source0:       https://cdn.mysql.com/Downloads/Connector-Python/mysql-connector-python%{?product_suffix}-%{version}-src.tar.gz
 
-%if 0%{?rhel} == 8
+%if 0%{?rhel} < 10
 BuildRequires: python%{python3_pkgversion}-devel
 BuildRequires: python%{python3_pkgversion}-setuptools
-BuildRequires: python%{python3_pkgversion}-rpm-macros
 %endif
 
 %description
@@ -107,11 +104,10 @@ Obsoletes:     mysqlx-connector-python3-
 Provides:      mysqlx-connector-python3-cext = %{version}-%{release}
 %endif
 
-%if 0%{?rhel} == 8
-Requires:      python39
+%if 0%{?rhel} < 10
+Requires:      python3.12
 %endif
 
-
 %description -n mysqlx-connector-python3%{?product_suffix}
 MySQL Connector/Python enables Python programs to access MySQL
 databases, using an API that is compliant with the Python DB API
@@ -167,7 +163,7 @@ cd mysqlx-connector-python
 %{?scl:EOF}
 
 sed -i -e '/protobuf/d' %{buildroot}%{python3_sitearch}/mysqlx_connector_python-*.egg-info/requires.txt
-%if 0%{?rhel} == 10
+%if 0%{?rhel} > 8
 sed -i -e '/Requires-Dist: protobuf/d' %{buildroot}%{python3_sitearch}/mysqlx_connector_python-*.egg-info/PKG-INFO
 %endif
 
@@ -178,6 +174,13 @@ sed -i -e '/Requires-Dist: protobuf/d' %
 %{python3_sitearch}/_mysqlxpb.cpython*.so
 
 %changelog
+* Mon Jul 23 2025 Souma Kanti Ghosh <souma.kanti.ghosh@oracle.com> - 9.5.0-1
+- Updated for 9.5.0
+
+* Wed Jul 16 2025 Oscar Pacheco <oscar.p.pacheco@oracle.com> - 9.5.0-1
+- Removed Python 3.9 support
+- Added Python 3.12 support for EL 8 and 9
+
 * Mon Jun 9 2025 Oscar Pacheco <oscar.p.pacheco@oracle.com> - 9.4.0-1
 - Updated for 9.4.0
 
diff -pruN 9.4.0-1/mysqlx-connector-python/docs/INFO_SRC 9.5.0-1/mysqlx-connector-python/docs/INFO_SRC
--- 9.4.0-1/mysqlx-connector-python/docs/INFO_SRC	2025-07-10 16:09:39.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/docs/INFO_SRC	2025-10-15 05:28:33.000000000 +0000
@@ -1,7 +1,7 @@
 MySQL Connector/Python Sources Information
 
-version              :  9.4.0
-branch               :  release/9.4.0
-commit               :  d8319533003dba0e38a88bd9a3f840b39b60d6bc
-short                :  d8319533
-date                 :  2025-07-10 09:04:29 -0600
+version              :  9.5.0
+branch               :  release/9.5.0
+commit               :  a4793835e84d4af29d522889294a03b21ed5ef0f
+short                :  a4793835
+date                 :  2025-10-14 11:08:28 +0100
diff -pruN 9.4.0-1/mysqlx-connector-python/docs/mysql-connector-python.html 9.5.0-1/mysqlx-connector-python/docs/mysql-connector-python.html
--- 9.4.0-1/mysqlx-connector-python/docs/mysql-connector-python.html	2025-07-10 16:09:39.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/docs/mysql-connector-python.html	2025-10-15 05:28:33.000000000 +0000
@@ -21,26 +21,26 @@
           This product may include third-party software, used under
           license. If you are using a Commercial release of MySQL Connector/Python, see
           the
-          <a class="ulink" href="https://downloads.mysql.com/docs/licenses/connector-python-9.3-com-en.pdf" target="_top">MySQL Connector/Python
-          9.3 Commercial License Information User Manual</a> for
+          <a class="ulink" href="https://downloads.mysql.com/docs/licenses/connector-python-9.5-com-en.pdf" target="_top">MySQL Connector/Python
+          9.5 Commercial License Information User Manual</a> for
           licensing information, including licensing information
           relating to third-party software that may be included in this
           Commercial release. If you are using a Community release of
           MySQL Connector/Python, see the
-          <a class="ulink" href="https://downloads.mysql.com/docs/licenses/connector-python-9.3-gpl-en.pdf" target="_top">MySQL Connector/Python
-          9.3 Community License Information User Manual</a> for
+          <a class="ulink" href="https://downloads.mysql.com/docs/licenses/connector-python-9.5-gpl-en.pdf" target="_top">MySQL Connector/Python
+          9.5 Community License Information User Manual</a> for
           licensing information, including licensing information
           relating to third-party software that may be included in this
           Community release.
         </p><p>
         Document generated on:
 
-        2025-07-02
+        2025-10-13
 
 
 
-        (revision: 82696)
-      </p></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#preface">Preface and Legal Notices</a></span></dt><dt><span class="chapter"><a href="#connector-python-introduction">1 Introduction to MySQL Connector/Python</a></span></dt><dt><span class="chapter"><a href="#connector-python-coding">2 Guidelines for Python Developers</a></span></dt><dt><span class="chapter"><a href="#connector-python-versions">3 Connector/Python Versions</a></span></dt><dt><span class="chapter"><a href="#connector-python-installation">4 Connector/Python Installation</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-installation-guide">4.1 Quick Installation Guide</a></span></dt><dt><span class="section"><a href="#differences-between-binary-and-source-distribution">4.2 Differences Between Binary And Source Distributions</a></span></dt><dt><span class="section"><a href="#connector-python-obtaining">4.3 Obtaining Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-installation-binary">4.4 Installing Connector/Python from a Binary Distribution</a></span></dt><dd><dl><dt><span class="section"><a href="#id1842">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-installation-source">4.5 Installing Connector/Python from a Source Distribution</a></span></dt><dt><span class="section"><a href="#connector-python-verification">4.6 Verifying Your Connector/Python Installation</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-examples">5 Connector/Python Coding Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-example-connecting">5.1 Connecting to MySQL Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-ddl">5.2 Creating Tables Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-cursor-transaction">5.3 Inserting Data Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-cursor-select">5.4 Querying Data Using Connector/Python</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-tutorials">6 Connector/Python Tutorials</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-tutorial-cursorbuffered">6.1 Tutorial: Raise Employee's Salary Using a Buffered Cursor</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-connecting">7 Connector/Python Connection Establishment</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-connectargs">7.1 Connector/Python Connection Arguments</a></span></dt><dt><span class="section"><a href="#connector-python-option-files">7.2 Connector/Python Option-File Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-cext">8 The Connector/Python C Extension</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-cext-development">8.1 Application Development with the Connector/Python C Extension</a></span></dt><dt><span class="section"><a href="#connector-python-cext-module">8.2 The _mysql_connector C Extension Module</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-other">9 Connector/Python Other Topics</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-logging">9.1 Connector/Python Logging</a></span></dt><dt><span class="section"><a href="#connector-python-opentelemetry">9.2 Telemetry Support</a></span></dt><dt><span class="section"><a href="#connector-python-multi">9.3 Executing Multiple Statements</a></span></dt><dt><span class="section"><a href="#connector-python-asyncio">9.4 Asynchronous Connectivity</a></span></dt><dt><span class="section"><a href="#connector-python-connection-pooling">9.5 Connector/Python Connection Pooling</a></span></dt><dt><span class="section"><a href="#connector-python-django-backend">9.6 Connector/Python Django Back End</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-reference">10 Connector/Python API Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysql-connector">10.1 mysql.connector Module</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysql-connector-connect">10.1.1 mysql.connector.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-apilevel">10.1.2 mysql.connector.apilevel Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-paramstyle">10.1.3 mysql.connector.paramstyle Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-threadsafety">10.1.4 mysql.connector.threadsafety Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version">10.1.5 mysql.connector.__version__ Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version-info">10.1.6 mysql.connector.__version_info__ Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlconnection">10.2 connection.MySQLConnection Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlconnection-constructor">10.2.1 connection.MySQLConnection() Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-close">10.2.2 MySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-commit">10.2.3 MySQLConnection.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-config">10.2.4 MySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connect">10.2.5 MySQLConnection.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cursor">10.2.6 MySQLConnection.cursor() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-change-user">10.2.7 MySQLConnection.cmd_change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-debug">10.2.8 MySQLConnection.cmd_debug() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-init-db">10.2.9 MySQLConnection.cmd_init_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-ping">10.2.10 MySQLConnection.cmd_ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-info">10.2.11 MySQLConnection.cmd_process_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-kill">10.2.12 MySQLConnection.cmd_process_kill() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query">10.2.13 MySQLConnection.cmd_query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query-iter">10.2.14 MySQLConnection.cmd_query_iter() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-quit">10.2.15 MySQLConnection.cmd_quit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-refresh">10.2.16 MySQLConnection.cmd_refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-reset-connection">10.2.17 MySQLConnection.cmd_reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-shutdown">10.2.18 MySQLConnection.cmd_shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-statistics">10.2.19 MySQLConnection.cmd_statistics() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-disconnect">10.2.20 MySQLConnection.disconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-row">10.2.21 MySQLConnection.get_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-rows">10.2.22 MySQLConnection.get_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-info">10.2.23 MySQLConnection.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-version">10.2.24 MySQLConnection.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-is-connected">10.2.25 MySQLConnection.is_connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-isset-client-flag">10.2.26 MySQLConnection.isset_client_flag() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-ping">10.2.27 MySQLConnection.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reconnect">10.2.28 MySQLConnection.reconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reset-session">10.2.29 MySQLConnection.reset_session() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-rollback">10.2.30 MySQLConnection.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-charset-collation">10.2.31 MySQLConnection.set_charset_collation() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-client-flags">10.2.32 MySQLConnection.set_client_flags() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-shutdown">10.2.33 MySQLConnection.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-start-transaction">10.2.34 MySQLConnection.start_transaction() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-autocommit">10.2.35 MySQLConnection.autocommit Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unread-results">10.2.36 MySQLConnection.unread_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-can-consume-results">10.2.37 MySQLConnection.can_consume_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-charset">10.2.38 MySQLConnection.charset Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-client-flags">10.2.39 MySQLConnection.client_flags Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-collation">10.2.40 MySQLConnection.collation Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connected">10.2.41 MySQLConnection.connected Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connection-id">10.2.42 MySQLConnection.connection_id Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-converter-class">10.2.43 MySQLConnection.converter-class Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-database">10.2.44 MySQLConnection.database Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-warnings">10.2.45 MySQLConnection.get_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-in-transaction">10.2.46 MySQLConnection.in_transaction Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-raise-on-warnings">10.2.47 MySQLConnection.raise_on_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-host">10.2.48 MySQLConnection.server_host Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-info">10.2.49 MySQLConnection.server_info Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-port">10.2.50 MySQLConnection.server_port Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-version">10.2.51 MySQLConnection.server_version Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-sql-mode">10.2.52 MySQLConnection.sql_mode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-time-zone">10.2.53 MySQLConnection.time_zone Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-use-unicode">10.2.54 MySQLConnection.use_unicode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unix-socket">10.2.55 MySQLConnection.unix_socket Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-user">10.2.56 MySQLConnection.user Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool">10.3 pooling.MySQLConnectionPool Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-constructor">10.3.1 pooling.MySQLConnectionPool Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-add-connection">10.3.2 MySQLConnectionPool.add_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-get-connection">10.3.3 MySQLConnectionPool.get_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-set-config">10.3.4 MySQLConnectionPool.set_config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-pool-name">10.3.5 MySQLConnectionPool.pool_name Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection">10.4 pooling.PooledMySQLConnection Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-constructor">10.4.1 pooling.PooledMySQLConnection Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-close">10.4.2 PooledMySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-config">10.4.3 PooledMySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-pool-name">10.4.4 PooledMySQLConnection.pool_name Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlcursor">10.5 cursor.MySQLCursor Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlcursor-constructor">10.5.1 cursor.MySQLCursor Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-add-attribute">10.5.2 MySQLCursor.add_attribute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-clear-attributes">10.5.3 MySQLCursor.clear_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-get-attributes">10.5.4 MySQLCursor.get_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-callproc">10.5.5 MySQLCursor.callproc() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-close">10.5.6 MySQLCursor.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-execute">10.5.7 MySQLCursor.execute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-executemany">10.5.8 MySQLCursor.executemany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchall">10.5.9 MySQLCursor.fetchall() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchmany">10.5.10 MySQLCursor.fetchmany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchone">10.5.11 MySQLCursor.fetchone() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-nextset">10.5.12 MySQLCursor.nextset() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchsets">10.5.13 MySQLCursor.fetchsets() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchwarnings">10.5.14 MySQLCursor.fetchwarnings() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-stored-results">10.5.15 MySQLCursor.stored_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-column-names">10.5.16 MySQLCursor.column_names Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-description">10.5.17 MySQLCursor.description Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-warnings">10.5.18 MySQLCursor.warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-lastrowid">10.5.19 MySQLCursor.lastrowid Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-rowcount">10.5.20 MySQLCursor.rowcount Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-statement">10.5.21 MySQLCursor.statement Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-with-rows">10.5.22 MySQLCursor.with_rows Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-cursor-subclasses">10.6 Subclasses cursor.MySQLCursor</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffered">10.6.1 cursor.MySQLCursorBuffered Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorraw">10.6.2 cursor.MySQLCursorRaw Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursordict">10.6.3 cursor.MySQLCursorDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffereddict">10.6.4 cursor.MySQLCursorBufferedDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorprepared">10.6.5 cursor.MySQLCursorPrepared Class</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-clientflag">10.7 constants.ClientFlag Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-fieldtype">10.8 constants.FieldType Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-sqlmode">10.9 constants.SQLMode Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-characterset">10.10 constants.CharacterSet Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-refreshoption">10.11 constants.RefreshOption Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors">10.12 Errors and Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-errorcode">10.12.1 errorcode Module</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-error">10.12.2 errors.Error Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-dataerror">10.12.3 errors.DataError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-databaseerror">10.12.4 errors.DatabaseError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-integrityerror">10.12.5 errors.IntegrityError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-interfaceerror">10.12.6 errors.InterfaceError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-internalerror">10.12.7 errors.InternalError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-notsupportederror">10.12.8 errors.NotSupportedError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-operationalerror">10.12.9 errors.OperationalError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-poolerror">10.12.10 errors.PoolError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-programmingerror">10.12.11 errors.ProgrammingError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-warning">10.12.12 errors.Warning Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-custom-error-exception">10.12.13 errors.custom_error_exception() Function</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#connector-python-cext-reference">11 Connector/Python C Extension API Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-cext-mysql-connector">11.1 _mysql_connector Module</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-mysql">11.2 _mysql_connector.MySQL() Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-affected-rows">11.3 _mysql_connector.MySQL.affected_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-autocommit">11.4 _mysql_connector.MySQL.autocommit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-buffered">11.5 _mysql_connector.MySQL.buffered() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-change-user">11.6 _mysql_connector.MySQL.change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-character-set-name">11.7 _mysql_connector.MySQL.character_set_name() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-close">11.8 _mysql_connector.MySQL.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-commit">11.9 _mysql_connector.MySQL.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-connect">11.10 _mysql_connector.MySQL.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-connected">11.11 _mysql_connector.MySQL.connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-consume-result">11.12 _mysql_connector.MySQL.consume_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-convert-to-mysql">11.13 _mysql_connector.MySQL.convert_to_mysql() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-escape-string">11.14 _mysql_connector.MySQL.escape_string() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-fetch-fields">11.15 _mysql_connector.MySQL.fetch_fields() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-fetch-row">11.16 _mysql_connector.MySQL.fetch_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-field-count">11.17 _mysql_connector.MySQL.field_count() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-free-result">11.18 _mysql_connector.MySQL.free_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-character-set-info">11.19 _mysql_connector.MySQL.get_character_set_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-client-info">11.20 _mysql_connector.MySQL.get_client_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-client-version">11.21 _mysql_connector.MySQL.get_client_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-host-info">11.22 _mysql_connector.MySQL.get_host_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-proto-info">11.23 _mysql_connector.MySQL.get_proto_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-server-info">11.24 _mysql_connector.MySQL.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-server-version">11.25 _mysql_connector.MySQL.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-ssl-cipher">11.26 _mysql_connector.MySQL.get_ssl_cipher() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-hex-string">11.27 _mysql_connector.MySQL.hex_string() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-insert-id">11.28 _mysql_connector.MySQL.insert_id() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-more-results">11.29 _mysql_connector.MySQL.more_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-next-result">11.30 _mysql_connector.MySQL.next_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-num-fields">11.31 _mysql_connector.MySQL.num_fields() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-num-rows">11.32 _mysql_connector.MySQL.num_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-ping">11.33 _mysql_connector.MySQL.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-query">11.34 _mysql_connector.MySQL.query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-raw">11.35 _mysql_connector.MySQL.raw() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-refresh">11.36 _mysql_connector.MySQL.refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-reset-connection">11.37 _mysql_connector.MySQL.reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-rollback">11.38 _mysql_connector.MySQL.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-select-db">11.39 _mysql_connector.MySQL.select_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-set-character-set">11.40 _mysql_connector.MySQL.set_character_set() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-shutdown">11.41 _mysql_connector.MySQL.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-stat">11.42 _mysql_connector.MySQL.stat() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-thread-id">11.43 _mysql_connector.MySQL.thread_id() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-use-unicode">11.44 _mysql_connector.MySQL.use_unicode() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-warning-count">11.45 _mysql_connector.MySQL.warning_count() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-have-result-set">11.46 _mysql_connector.MySQL.have_result_set Property</a></span></dt></dl></dd><dt><span class="index"><a href="#ix01">Index</a></span></dt></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="preface"></a>Preface and Legal Notices</h1></div></div></div><p>
+        (revision: 83739)
+      </p></div></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="preface"><a href="#preface">Preface and Legal Notices</a></span></dt><dt><span class="chapter"><a href="#connector-python-introduction">1 Introduction to MySQL Connector/Python</a></span></dt><dt><span class="chapter"><a href="#connector-python-coding">2 Guidelines for Python Developers</a></span></dt><dt><span class="chapter"><a href="#connector-python-versions">3 Connector/Python Versions</a></span></dt><dt><span class="chapter"><a href="#connector-python-installation">4 Connector/Python Installation</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-installation-guide">4.1 Quick Installation Guide</a></span></dt><dt><span class="section"><a href="#differences-between-binary-and-source-distribution">4.2 Differences Between Binary And Source Distributions</a></span></dt><dt><span class="section"><a href="#connector-python-obtaining">4.3 Obtaining Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-installation-binary">4.4 Installing Connector/Python from a Binary Distribution</a></span></dt><dd><dl><dt><span class="section"><a href="#id1847">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-installation-source">4.5 Installing Connector/Python from a Source Distribution</a></span></dt><dt><span class="section"><a href="#connector-python-verification">4.6 Verifying Your Connector/Python Installation</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-examples">5 Connector/Python Coding Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-example-connecting">5.1 Connecting to MySQL Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-ddl">5.2 Creating Tables Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-cursor-transaction">5.3 Inserting Data Using Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-example-cursor-select">5.4 Querying Data Using Connector/Python</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-tutorials">6 Connector/Python Tutorials</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-tutorial-cursorbuffered">6.1 Tutorial: Raise Employee's Salary Using a Buffered Cursor</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-connecting">7 Connector/Python Connection Establishment</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-connectargs">7.1 Connector/Python Connection Arguments</a></span></dt><dt><span class="section"><a href="#connector-python-option-files">7.2 Connector/Python Option-File Support</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-cext">8 The Connector/Python C Extension</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-cext-development">8.1 Application Development with the Connector/Python C Extension</a></span></dt><dt><span class="section"><a href="#connector-python-cext-module">8.2 The _mysql_connector C Extension Module</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-other">9 Connector/Python Other Topics</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-logging">9.1 Connector/Python Logging</a></span></dt><dt><span class="section"><a href="#connector-python-opentelemetry">9.2 Telemetry Support</a></span></dt><dt><span class="section"><a href="#connector-python-multi">9.3 Executing Multiple Statements</a></span></dt><dt><span class="section"><a href="#connector-python-asyncio">9.4 Asynchronous Connectivity</a></span></dt><dt><span class="section"><a href="#connector-python-connection-pooling">9.5 Connector/Python Connection Pooling</a></span></dt><dt><span class="section"><a href="#connector-python-django-backend">9.6 Connector/Python Django Back End</a></span></dt></dl></dd><dt><span class="chapter"><a href="#connector-python-reference">10 Connector/Python API Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysql-connector">10.1 mysql.connector Module</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysql-connector-connect">10.1.1 mysql.connector.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-apilevel">10.1.2 mysql.connector.apilevel Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-paramstyle">10.1.3 mysql.connector.paramstyle Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-threadsafety">10.1.4 mysql.connector.threadsafety Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version">10.1.5 mysql.connector.__version__ Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version-info">10.1.6 mysql.connector.__version_info__ Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlconnection">10.2 connection.MySQLConnection Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlconnection-constructor">10.2.1 connection.MySQLConnection() Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-close">10.2.2 MySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-commit">10.2.3 MySQLConnection.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-config">10.2.4 MySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connect">10.2.5 MySQLConnection.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cursor">10.2.6 MySQLConnection.cursor() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-change-user">10.2.7 MySQLConnection.cmd_change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-debug">10.2.8 MySQLConnection.cmd_debug() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-init-db">10.2.9 MySQLConnection.cmd_init_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-ping">10.2.10 MySQLConnection.cmd_ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-info">10.2.11 MySQLConnection.cmd_process_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-kill">10.2.12 MySQLConnection.cmd_process_kill() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query">10.2.13 MySQLConnection.cmd_query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query-iter">10.2.14 MySQLConnection.cmd_query_iter() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-quit">10.2.15 MySQLConnection.cmd_quit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-refresh">10.2.16 MySQLConnection.cmd_refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-reset-connection">10.2.17 MySQLConnection.cmd_reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-shutdown">10.2.18 MySQLConnection.cmd_shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-statistics">10.2.19 MySQLConnection.cmd_statistics() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-disconnect">10.2.20 MySQLConnection.disconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-row">10.2.21 MySQLConnection.get_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-rows">10.2.22 MySQLConnection.get_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-info">10.2.23 MySQLConnection.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-version">10.2.24 MySQLConnection.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-is-connected">10.2.25 MySQLConnection.is_connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-isset-client-flag">10.2.26 MySQLConnection.isset_client_flag() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-ping">10.2.27 MySQLConnection.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reconnect">10.2.28 MySQLConnection.reconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reset-session">10.2.29 MySQLConnection.reset_session() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-rollback">10.2.30 MySQLConnection.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-charset-collation">10.2.31 MySQLConnection.set_charset_collation() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-client-flags">10.2.32 MySQLConnection.set_client_flags() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-shutdown">10.2.33 MySQLConnection.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-start-transaction">10.2.34 MySQLConnection.start_transaction() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-autocommit">10.2.35 MySQLConnection.autocommit Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unread-results">10.2.36 MySQLConnection.unread_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-can-consume-results">10.2.37 MySQLConnection.can_consume_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-charset">10.2.38 MySQLConnection.charset Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-client-flags">10.2.39 MySQLConnection.client_flags Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-collation">10.2.40 MySQLConnection.collation Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connected">10.2.41 MySQLConnection.connected Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connection-id">10.2.42 MySQLConnection.connection_id Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-converter-class">10.2.43 MySQLConnection.converter-class Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-database">10.2.44 MySQLConnection.database Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-warnings">10.2.45 MySQLConnection.get_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-in-transaction">10.2.46 MySQLConnection.in_transaction Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-raise-on-warnings">10.2.47 MySQLConnection.raise_on_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-host">10.2.48 MySQLConnection.server_host Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-info">10.2.49 MySQLConnection.server_info Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-port">10.2.50 MySQLConnection.server_port Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-version">10.2.51 MySQLConnection.server_version Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-sql-mode">10.2.52 MySQLConnection.sql_mode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-time-zone">10.2.53 MySQLConnection.time_zone Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-use-unicode">10.2.54 MySQLConnection.use_unicode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unix-socket">10.2.55 MySQLConnection.unix_socket Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-user">10.2.56 MySQLConnection.user Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool">10.3 pooling.MySQLConnectionPool Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-constructor">10.3.1 pooling.MySQLConnectionPool Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-add-connection">10.3.2 MySQLConnectionPool.add_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-get-connection">10.3.3 MySQLConnectionPool.get_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-set-config">10.3.4 MySQLConnectionPool.set_config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-pool-name">10.3.5 MySQLConnectionPool.pool_name Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection">10.4 pooling.PooledMySQLConnection Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-constructor">10.4.1 pooling.PooledMySQLConnection Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-close">10.4.2 PooledMySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-config">10.4.3 PooledMySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-pool-name">10.4.4 PooledMySQLConnection.pool_name Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-mysqlcursor">10.5 cursor.MySQLCursor Class</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlcursor-constructor">10.5.1 cursor.MySQLCursor Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-add-attribute">10.5.2 MySQLCursor.add_attribute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-clear-attributes">10.5.3 MySQLCursor.clear_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-get-attributes">10.5.4 MySQLCursor.get_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-callproc">10.5.5 MySQLCursor.callproc() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-close">10.5.6 MySQLCursor.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-execute">10.5.7 MySQLCursor.execute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-executemany">10.5.8 MySQLCursor.executemany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchall">10.5.9 MySQLCursor.fetchall() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchmany">10.5.10 MySQLCursor.fetchmany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchone">10.5.11 MySQLCursor.fetchone() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-nextset">10.5.12 MySQLCursor.nextset() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchsets">10.5.13 MySQLCursor.fetchsets() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchwarnings">10.5.14 MySQLCursor.fetchwarnings() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-stored-results">10.5.15 MySQLCursor.stored_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-column-names">10.5.16 MySQLCursor.column_names Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-description">10.5.17 MySQLCursor.description Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-warnings">10.5.18 MySQLCursor.warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-lastrowid">10.5.19 MySQLCursor.lastrowid Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-rowcount">10.5.20 MySQLCursor.rowcount Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-statement">10.5.21 MySQLCursor.statement Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-with-rows">10.5.22 MySQLCursor.with_rows Property</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-cursor-subclasses">10.6 Subclasses cursor.MySQLCursor</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffered">10.6.1 cursor.MySQLCursorBuffered Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorraw">10.6.2 cursor.MySQLCursorRaw Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursordict">10.6.3 cursor.MySQLCursorDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffereddict">10.6.4 cursor.MySQLCursorBufferedDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorprepared">10.6.5 cursor.MySQLCursorPrepared Class</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-api-clientflag">10.7 constants.ClientFlag Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-fieldtype">10.8 constants.FieldType Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-sqlmode">10.9 constants.SQLMode Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-characterset">10.10 constants.CharacterSet Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-refreshoption">10.11 constants.RefreshOption Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors">10.12 Errors and Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-errorcode">10.12.1 errorcode Module</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-error">10.12.2 errors.Error Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-dataerror">10.12.3 errors.DataError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-databaseerror">10.12.4 errors.DatabaseError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-integrityerror">10.12.5 errors.IntegrityError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-interfaceerror">10.12.6 errors.InterfaceError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-internalerror">10.12.7 errors.InternalError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-notsupportederror">10.12.8 errors.NotSupportedError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-operationalerror">10.12.9 errors.OperationalError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-poolerror">10.12.10 errors.PoolError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-programmingerror">10.12.11 errors.ProgrammingError Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-warning">10.12.12 errors.Warning Exception</a></span></dt><dt><span class="section"><a href="#connector-python-api-errors-custom-error-exception">10.12.13 errors.custom_error_exception() Function</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#connector-python-cext-reference">11 Connector/Python C Extension API Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#connector-python-api-cext-mysql-connector">11.1 _mysql_connector Module</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-mysql">11.2 _mysql_connector.MySQL() Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-affected-rows">11.3 _mysql_connector.MySQL.affected_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-autocommit">11.4 _mysql_connector.MySQL.autocommit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-buffered">11.5 _mysql_connector.MySQL.buffered() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-change-user">11.6 _mysql_connector.MySQL.change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-character-set-name">11.7 _mysql_connector.MySQL.character_set_name() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-close">11.8 _mysql_connector.MySQL.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-commit">11.9 _mysql_connector.MySQL.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-connect">11.10 _mysql_connector.MySQL.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-connected">11.11 _mysql_connector.MySQL.connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-consume-result">11.12 _mysql_connector.MySQL.consume_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-convert-to-mysql">11.13 _mysql_connector.MySQL.convert_to_mysql() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-escape-string">11.14 _mysql_connector.MySQL.escape_string() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-fetch-fields">11.15 _mysql_connector.MySQL.fetch_fields() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-fetch-row">11.16 _mysql_connector.MySQL.fetch_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-field-count">11.17 _mysql_connector.MySQL.field_count() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-free-result">11.18 _mysql_connector.MySQL.free_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-character-set-info">11.19 _mysql_connector.MySQL.get_character_set_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-client-info">11.20 _mysql_connector.MySQL.get_client_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-client-version">11.21 _mysql_connector.MySQL.get_client_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-host-info">11.22 _mysql_connector.MySQL.get_host_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-proto-info">11.23 _mysql_connector.MySQL.get_proto_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-server-info">11.24 _mysql_connector.MySQL.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-server-version">11.25 _mysql_connector.MySQL.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-get-ssl-cipher">11.26 _mysql_connector.MySQL.get_ssl_cipher() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-hex-string">11.27 _mysql_connector.MySQL.hex_string() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-insert-id">11.28 _mysql_connector.MySQL.insert_id() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-more-results">11.29 _mysql_connector.MySQL.more_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-next-result">11.30 _mysql_connector.MySQL.next_result() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-num-fields">11.31 _mysql_connector.MySQL.num_fields() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-num-rows">11.32 _mysql_connector.MySQL.num_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-ping">11.33 _mysql_connector.MySQL.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-query">11.34 _mysql_connector.MySQL.query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-raw">11.35 _mysql_connector.MySQL.raw() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-refresh">11.36 _mysql_connector.MySQL.refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-reset-connection">11.37 _mysql_connector.MySQL.reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-rollback">11.38 _mysql_connector.MySQL.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-select-db">11.39 _mysql_connector.MySQL.select_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-set-character-set">11.40 _mysql_connector.MySQL.set_character_set() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-shutdown">11.41 _mysql_connector.MySQL.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-stat">11.42 _mysql_connector.MySQL.stat() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-thread-id">11.43 _mysql_connector.MySQL.thread_id() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-use-unicode">11.44 _mysql_connector.MySQL.use_unicode() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-warning-count">11.45 _mysql_connector.MySQL.warning_count() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-cext-have-result-set">11.46 _mysql_connector.MySQL.have_result_set Property</a></span></dt></dl></dd><dt><span class="index"><a href="#ix01">Index</a></span></dt></dl></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a name="preface"></a>Preface and Legal Notices</h1></div></div></div><p>
       This manual describes how to install, configure, and develop
       database applications using MySQL Connector/Python, the Python driver for
       communicating with MySQL servers.
@@ -389,7 +389,12 @@ row.'''
           <th scope="col">Python Versions</th>
           <th scope="col">Connector Status</th>
         </tr></thead><tbody><tr>
-          <th scope="row">9.1.0 and later</th>
+          <th scope="row">9.5.0 and later</th>
+          <td>8.0 and later</td>
+          <td>3.14, 3.13*, 3.12, 3.11, 3.10</td>
+          <td>General Availability</td>
+        </tr><tr>
+          <th scope="row">9.10 - 9.4.0</th>
           <td>8.0 and later</td>
           <td>3.13*, 3.12, 3.11, 3.10, 3.9</td>
           <td>General Availability</td>
@@ -399,7 +404,7 @@ row.'''
           <td>3.12, 3.11, 3.10, 3.9, 3.8</td>
           <td>General Availability</td>
         </tr><tr>
-          <th scope="row">8.1.0 through 8.3.0</th>
+          <th scope="row">8.1.0 - 8.3.0</th>
           <td>5.7 and later</td>
           <td>3.12 (8.2.0+), 3.11, 3.10, 3.9, 3.8</td>
           <td>General Availability</td>
@@ -448,8 +453,7 @@ row.'''
           depends on the Python Standard Library.
         </p><p>
           The X DevAPI variant of the connector requires Python
-          Protobuf. The required version is 4.25.3, and was &gt;=
-          4.21.1,&lt;= 4.21.12 before Connector/Python 9.0.0.
+          Protobuf. The required version is 5.29.4.
         </p></li><li class="listitem"><p>
           As a C Extension that interfaces with the MySQL C client
           library. This implementation of the protocol is dependent on
@@ -473,7 +477,7 @@ row.'''
           <span class="bold"><strong>Source Distribution</strong></span>: A
           distribution that contains only source files and is generally
           platform independent.
-        </p></li></ul></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="connector-python-installation"></a>Chapter 4 Connector/Python Installation</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#quick-installation-guide">4.1 Quick Installation Guide</a></span></dt><dt><span class="section"><a href="#differences-between-binary-and-source-distribution">4.2 Differences Between Binary And Source Distributions</a></span></dt><dt><span class="section"><a href="#connector-python-obtaining">4.3 Obtaining Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-installation-binary">4.4 Installing Connector/Python from a Binary Distribution</a></span></dt><dd><dl><dt><span class="section"><a href="#id1842">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-installation-source">4.5 Installing Connector/Python from a Source Distribution</a></span></dt><dt><span class="section"><a href="#connector-python-verification">4.6 Verifying Your Connector/Python Installation</a></span></dt></dl></div><p>
+        </p></li></ul></div></div></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="connector-python-installation"></a>Chapter 4 Connector/Python Installation</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="#quick-installation-guide">4.1 Quick Installation Guide</a></span></dt><dt><span class="section"><a href="#differences-between-binary-and-source-distribution">4.2 Differences Between Binary And Source Distributions</a></span></dt><dt><span class="section"><a href="#connector-python-obtaining">4.3 Obtaining Connector/Python</a></span></dt><dt><span class="section"><a href="#connector-python-installation-binary">4.4 Installing Connector/Python from a Binary Distribution</a></span></dt><dd><dl><dt><span class="section"><a href="#id1847">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></dd><dt><span class="section"><a href="#connector-python-installation-source">4.5 Installing Connector/Python from a Source Distribution</a></span></dt><dt><span class="section"><a href="#connector-python-verification">4.6 Verifying Your Connector/Python Installation</a></span></dt></dl></div><p>
     Connector/Python runs on any platform where Python is installed. Make sure
     Python is installed on your platform:
   </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
@@ -566,7 +570,7 @@ $ pip install mysqlx-connector-python
       Linux) are no longer available from Oracle since Connector/Python
       9.0.0. Using <code class="literal">pip</code> to manage Connector/Python on
       those Linux distributions is recommended.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-installation-binary"></a>4.4 Installing Connector/Python from a Binary Distribution</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#id1842">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-installation-binary"></a>4.4 Installing Connector/Python from a Binary Distribution</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#id1847">4.4.1 Installing Connector/Python with pip</a></span></dt><dt><span class="section"><a href="#installing-from-rpm">4.4.2 Installing by RPMs</a></span></dt></dl></div><p>
       Connector/Python includes the classic and X DevAPI connector APIs,
       which are installed separately. Each can be installed by a binary
       distribution.
@@ -576,7 +580,7 @@ $ pip install mysqlx-connector-python
       and the
       <a class="ulink" href="https://packaging.python.org/en/latest/discussions/package-formats/#what-is-a-wheel" target="_top">wheel</a>
       package formats.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="id1842"></a>4.4.1 Installing Connector/Python with pip</h3></div></div></div><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="id1847"></a>4.4.1 Installing Connector/Python with pip</h3></div></div></div><p>
         Installation via <span class="command"><strong>pip</strong></span> is supported on Windows,
         macOS, and Linux platforms.
       </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
@@ -603,7 +607,7 @@ $&gt; pip install mysqlx-connector-pytho
         can install it as follows:
       </p><pre data-lang="css" class="programlisting"># Installation
 $ pip install <em class="replaceable"><code>/path/to/wheel/&lt;wheel package name&gt;</code></em>.whl
-</pre><h4><a name="id1854"></a>Installation of Optional Features</h4><p>
+</pre><h4><a name="id1859"></a>Installation of Optional Features</h4><p>
         Installation from wheels allow you to install optional
         dependencies to enable certain features with Connector/Python.
         For example:
@@ -656,7 +660,7 @@ $ pip install mysqlx-connector-python[co
           the MySQL Yum Repository</a> and
           <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html#yum-install-components" target="_top">Installing
           Additional MySQL Products and Components with Yum</a>).
-        </p><h5><a name="id1893"></a>Prerequisites</h5><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+        </p><h5><a name="id1898"></a>Prerequisites</h5><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
               <span class="emphasis"><em>For installing X DevAPI only:</em></span>Because
               the required <code class="literal">python3-protobuf</code> RPM
               package is not available for Python 3.8 on the RedHat
@@ -671,7 +675,7 @@ $ pip install mysqlx-connector-python[co
               which is the default authentication method for MySQL 8.0
               and later. Install it using the Yum repository
             </p><pre class="programlisting">  $ sudo yum install mysql-community-client-plugins
-</pre></li></ul></div><h5><a name="id1905"></a>Installation</h5><p>
+</pre></li></ul></div><h5><a name="id1910"></a>Installation</h5><p>
           Use the following commands to install Connector/Python:
         </p><pre class="programlisting">$ sudo yum install mysql-connector-python
 
@@ -687,7 +691,7 @@ $ sudo yum install mysqlx-connector-pyth
           packages before installing them. To learn more, see
           <a class="ulink" href="https://dev.mysql.com/doc/refman/8.4/en/verifying-package-integrity.html" target="_top">Verifying
           Package Integrity Using MD5 Checksums or GnuPG</a>.
-        </p><h5><a name="id1915"></a>Prerequisites</h5><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+        </p><h5><a name="id1920"></a>Prerequisites</h5><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
               <span class="emphasis"><em>For installing X DevAPI only:</em></span>Because
               the required <code class="literal">python3-protobuf</code> RPM
               package is not available for Python 3.8 on the RedHat
@@ -701,27 +705,19 @@ $ sudo yum install mysqlx-connector-pyth
               methods like <code class="literal">caching_sha2_password</code>,
               which is the default authentication method for MySQL 8.0
               and later.
-            </p><pre class="programlisting">  $ rpm -i mysql-community-client-plugins-<em class="replaceable"><code>ver</code></em>.<em class="replaceable"><code>distro</code></em>.<em class="replaceable"><code>architecture</code></em>.rpm</pre></li></ul></div><h5><a name="id1930"></a>Installation</h5><p>
+            </p><pre class="programlisting">  $ rpm -i mysql-community-client-plugins-<em class="replaceable"><code>ver</code></em>.<em class="replaceable"><code>distro</code></em>.<em class="replaceable"><code>architecture</code></em>.rpm</pre></li></ul></div><h5><a name="id1935"></a>Installation</h5><p>
           To install Connector/Python using the downloaded RPM packages:
         </p><pre class="programlisting">$ rpm -i mysql-connector-python-<em class="replaceable"><code>ver</code></em>.<em class="replaceable"><code>distro</code></em>.<em class="replaceable"><code>architecture</code></em>.rpm
 
 # Optionally, install X DevAPI
 $ rpm -i mysqlx-connector-python-<em class="replaceable"><code>ver</code></em>.<em class="replaceable"><code>distro</code></em>.<em class="replaceable"><code>architecture</code></em>.rpm
 </pre></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-installation-source"></a>4.5 Installing Connector/Python from a Source Distribution</h2></div></div></div><p>
-      Connector/Python source distributions are platform independent. Source
-      distributions are packaged in two formats:
-    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
-          <code class="literal">Zip</code> archive format
-          (<code class="filename">.zip</code> file)
-        </p></li><li class="listitem"><p>
-          Compressed <code class="literal">tar</code> archive format
-          (<code class="filename">.tar.gz</code> file)
-        </p></li></ul></div><p>
-      Either of the two packaging formats can be used on any platforms,
-      but <code class="literal">Zip</code> archives are more commonly used on
-      Windows systems and <code class="literal">tar</code> archives on Unix and
-      Unix-like systems.
-    </p><h3><a name="id1954"></a>Prerequisites for Compiling Connector/Python with the C Extension</h3><p>
+      The Connector/Python source distribution is platform independent, and is
+      packaged in the compressed <code class="literal">tar</code> archive format
+      (<code class="filename">.tar.gz</code> file). See
+      <a class="link" href="#connector-python-obtaining" title="4.3 Obtaining Connector/Python">Obtaining
+      Connector/Python</a>) on how to download them.
+    </p><h3><a name="id1950"></a>Prerequisites for Compiling Connector/Python with the C Extension</h3><p>
       Source distributions include the C Extension that interfaces with
       the MySQL C client library. <span class="emphasis"><em>You can build the
       distribution with or without support for this
@@ -746,9 +742,8 @@ $ rpm -i mysqlx-connector-python-<em cla
           <a class="ulink" href="https://dev.mysql.com/downloads/" target="_top">MySQL
           download site</a>).
         </p></li><li class="listitem"><p>
-          <span class="emphasis"><em>For installing the X DevAPI interface
-          only:</em></span> Protobuf C++ (version 4.25.3 or later).
-        </p></li></ul></div><h3><a name="id1977"></a>Installing Connector/Python from Source Code Using
+          <span class="emphasis"><em>For installing the X DevAPI interface only:</em></span> Protobuf C++ (version
+            <code class="code">5.29.4</code>). </p></li></ul></div><h3><a name="id1974"></a>Installing Connector/Python from Source Code Using
       <code class="literal">pip</code></h3><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
         We recommend leveraging
         <a class="ulink" href="https://docs.python.org/3/tutorial/venv.html" target="_top">python
@@ -756,120 +751,70 @@ $ rpm -i mysqlx-connector-python-<em cla
         installation instead of installing packages directly into the
         Python system environment.
       </p></div><p>
-      To install Connector/Python from a <code class="literal">Zip</code> archive,
-      download its latest version from the Connector/Python download
-      site (see
-      <a class="link" href="#connector-python-obtaining" title="4.3 Obtaining Connector/Python">Obtaining
-      Connector/Python</a>) and follow the steps described below.
-    </p><p>
       <span class="bold"><strong>For installing the classic
       interface:</strong></span>
     </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
-          Unpack the Zip archive in a directory of your preference.
+          Download the latest version of the <code class="literal">sdist</code> of
+          Connector/Python for the classic MySQL protocol, whose name is
+          in the format of
+          <code class="code">mysql_connector_python-x.y.z.tar.gz</code>.
         </p></li><li class="listitem"><p>
-          Start a terminal and change location to the folder where you
-          unpacked the Zip archive. The unpacked folder should have a
-          layout similar to the following:
-        </p><pre data-lang="bash" class="programlisting">    mysql-connector-python-<em class="replaceable"><code>x.y.z</code></em>-src
-    ├── CHANGES.txt
-    ├── CONTRIBUTING.md
-    ├── LICENSE.txt
-    ├── mysql-connector-python
-    │   ...
-    │   ├── setup.py
-    │   ...
-    ├── pyproject.toml
-    ├── README.rst
-    ├── README.txt
-    └── SECURITY.md
-</pre></li><li class="listitem"><p>
-          Go into the
-          <code class="literal">mysql-connector-python-<em class="replaceable"><code>x.y.z</code></em>-src</code>
-          folder, and perform the installation using this command:
-        </p><pre class="programlisting"> pip install ./mysql-connector-python
-</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Warning</div><p>
-            DO NOT use <code class="literal">mysql-connector-python</code> instead
-            of <code class="literal">./mysql-connector-python</code>, as the
-            former will install the WHEEL package from the PyPI
-            repository, and the latter will install the local WHEEL that
-            is compiled from the source code.
-          </p></div><p>
-          <span class="emphasis"><em>To include the C Extension</em></span>, use these
-          steps instead to provide the path to the installation
-          directory of MySQL Server (or to the folder where the server
-          binaries are located) with the <code class="literal">MYSQL_CAPI</code>
-          system variable before running the installation step. On Linux
+          <span class="emphasis"><em>Optional: To include the C Extension</em></span>, use
+          these steps to provide the path to the installation directory
+          of MySQL Server (or to the folder where the server binaries
+          are located) with the <code class="literal">MYSQL_CAPI</code> system
+          variable before running the installation step. On Linux
           platforms:
         </p><pre class="programlisting"> $ export MYSQL_CAPI=&lt;path to server binaries&gt; 
- $ pip install ./mysql-connector-python
 </pre><p>
           On Windows platforms:
-        </p><p>
-</p><pre class="programlisting"> &gt; $env:MYSQL_CAPI=&lt;path to server binaries&gt;
- &gt; pip install ./mysql-connector-python
+        </p><pre class="programlisting"> &gt; $env:MYSQL_CAPI=&lt;path to server binaries&gt;
 </pre><p>
-
           </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
               It is not required that the server is actually installed
               on the system; for compiling the C-extension, the presence
               of libraries are sufficient
             </p></div><p>
-        </p></li></ol></div><p>
-      <span class="bold"><strong>For installing X DevAPI:</strong></span>
-    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
-          Unpack the Zip archive in a directory of your preference.
         </p></li><li class="listitem"><p>
-          Start a terminal and change location to the folder where you
-          unpacked the Zip archive. The unpacked folder should have a
-          layout similar to the following:
-        </p><pre data-lang="bash" class="programlisting">  mysql-connector-python-<em class="replaceable"><code>x.y.z</code></em>-src
-    ├── CHANGES.txt
-    ├── CONTRIBUTING.md
-    ├── LICENSE.txt
-    ├── mysqlx-connector-python
-    │   ...
-    │   ├── setup.py
-    │   ...
-    ├── pyproject.toml
-    ├── README.rst
-    ├── README.txt
-    └── SECURITY.md
-</pre></li><li class="listitem"><p>
-          Go into the
-          <code class="literal">mysql-connector-python-x.y.z-src</code> folder,
-          and perform the installation using this commands:
-        </p><pre class="programlisting"> pip install ./mysqlx-connector-python
-</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Warning</div><p>
-            DO NOT use <code class="literal">mysqlx-connector-python</code>
-            instead of <code class="literal">./mysqlx-connector-python</code>, as
-            the former will install the WHEEL package from the PyPI
+          Perform the installation using this command:
+        </p><pre class="programlisting"> pip install ./mysql_connector_python-x.y.z.tar.gz</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Warning</div><p>
+            DO NOT use <code class="literal">mysql-connector-python</code> instead
+            of <code class="literal">./mysql_connector_python-x.y.z.tar.gz</code>,
+            as the former will install the WHEEL package from the PyPI
             repository, and the latter will install the local WHEEL that
             is compiled from the source code.
-          </p></div><p>
-          <span class="emphasis"><em>To include the Protobuf C-Extension,</em></span> use
-          these commands instead on Linux platforms to provide the path
-          to the folder where the protobuf binaries are located by the
-          <code class="literal">MYSQLXPB_PROTOBUF</code> system variable before
-          the installation step:
+          </p></div></li></ol></div><p>
+      <span class="bold"><strong>For installing X DevAPI:</strong></span>
+    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+          Download the latest version of the <code class="literal">sdist</code> of
+          Connector/Python for the MySQL X Protocol, whose name is in
+          the format of
+          <code class="code">mysqlx_connector_python-x.y.z.tar.gz</code>.
+        </p></li><li class="listitem"><p>
+          <span class="emphasis"><em>Optional: To include the Protobuf
+          C-Extension,</em></span> use these commands on Linux platforms
+          to provide the paths to the Protobuf folders by the
+          <code class="literal">MYSQLXPB_*</code> system variables before the
+          installation step:
         </p><pre class="programlisting"> $ export MYSQLXPB_PROTOBUF=<em class="replaceable"><code>&lt;path to protobuf binaries&gt;</code></em>
  $ export MYSQLXPB_PROTOBUF_INCLUDE_DIR="${MYSQLXPB_PROTOBUF}/include"
  $ export MYSQLXPB_PROTOBUF_LIB_DIR="${MYSQLXPB_PROTOBUF}/lib"
  $ export MYSQLXPB_PROTOC="${MYSQLXPB_PROTOBUF}/bin/protoc"
- $ pip install ./mysqlx-connector-python
 </pre><p>
-          Or these commands on Windows platforms to provide the path to
-          the folder where the protobuf binaries are located by the
-          <code class="literal">PROTOBUF</code> system variable before the
-          installation step:
+          Or these commands on Windows platforms:
         </p><pre class="programlisting"> &gt; $env:PROTOBUF=<em class="replaceable"><code>&lt;path to protobuf binaries&gt;</code></em>
  &gt; $env:PROTOBUF_INCLUDE_DIR=$env:PROTOBUF+"\include"
  &gt; $env:PROTOBUF_LIB_DIR=$env:PROTOBUF+"\lib"
  &gt; $env:PROTOC=$env:PROTOBUF+"\bin\protoc.exe"
- &gt; pip install ./mysqlx-connector-python
-</pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
-            It is not required that the server is actually installed on
-            the system; for compiling the C-extension, the presence of
-            libraries are sufficient
+</pre></li><li class="listitem"><p>
+          Perform the installation using this command:
+        </p><pre class="programlisting"> pip install ./mysqlx_connector_python-x.y.z.tar.gz</pre><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Warning</div><p>
+            DO NOT use <code class="literal">mysqlx-connector-python</code>
+            instead of
+            <code class="literal">./mysqlx_connector_python-x.y.z.tar.gz</code>,
+            as the former will install the WHEEL package from the PyPI
+            repository, and the latter will install the local WHEEL that
+            is compiled from the source code.
           </p></div></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-verification"></a>4.6 Verifying Your Connector/Python Installation</h2></div></div></div><h3><a name="verify-installation-pip"></a>Verifying Installations by <code class="literal">pip</code></h3><p>
       To verify that a Connector/Python package has been installed
       successfully using <code class="literal">pip</code>, use the following
@@ -1064,7 +1009,7 @@ else:
 
     print("Could not connect")
 
-</pre><h3><a name="id2103"></a>Using the Connector/Python Python or C Extension</h3><p>
+</pre><h3><a name="id2089"></a>Using the Connector/Python Python or C Extension</h3><p>
       Connector/Python offers two implementations: a pure Python interface and a C
       extension that uses the MySQL C client library (see
       <a class="xref" href="#connector-python-cext" title="Chapter 8 The Connector/Python C Extension">Chapter 8, <i>The Connector/Python C Extension</i></a>). This can be configured
@@ -1878,7 +1823,7 @@ cnx = MySQLConnection(user='joe', databa
           <td>Must be a string in the form "primary/instance@realm" such as
             "ldap/ldapauth@MYSQL.COM" where "@realm" is optional. Added
             in 8.0.23.</td>
-        </tr></tbody></table></div></div><br class="table-break"><h3><a name="id2638"></a>MySQL Authentication Options</h3><p>
+        </tr></tbody></table></div></div><br class="table-break"><h3><a name="id2624"></a>MySQL Authentication Options</h3><p>
       Authentication with MySQL typically uses a
       <code class="literal">username</code> and <code class="literal">password</code>.
     </p><p>
@@ -2020,7 +1965,7 @@ async def test():
             await cur.execute("SELECT @@version")
             print(await cur.fetchall())
 asyncio.run(test())
-</pre><h3><a name="id2691"></a>Character Encoding</h3><p>
+</pre><h3><a name="id2677"></a>Character Encoding</h3><p>
       By default, strings coming from MySQL are returned as Python
       Unicode literals. To change this behavior, set
       <code class="literal">use_unicode</code> to <code class="literal">False</code>. You
@@ -2032,7 +1977,7 @@ asyncio.run(test())
       SQL statement directly. Similar to the <code class="literal">charset</code>
       property, you can set the <code class="literal">collation</code> for the
       current MySQL session.
-    </p><h3><a name="id2701"></a>Transactions</h3><p>
+    </p><h3><a name="id2687"></a>Transactions</h3><p>
       The <code class="literal">autocommit</code> value defaults to
       <code class="literal">False</code>, so transactions are not automatically
       committed. Call the <code class="literal">commit()</code> method of the
@@ -2042,19 +1987,19 @@ asyncio.run(test())
       write operations, it is best to leave the
       <code class="literal">autocommit</code> configuration option turned off when
       using <code class="literal">InnoDB</code> or other transactional tables.
-    </p><h3><a name="id2709"></a>Time Zones</h3><p>
+    </p><h3><a name="id2695"></a>Time Zones</h3><p>
       The time zone can be set per connection using the
       <code class="literal">time_zone</code> argument. This is useful, for
       example, if the MySQL server is set to UTC and
       <code class="literal">TIMESTAMP</code> values should be returned by MySQL
       converted to the <code class="literal">PST</code> time zone.
-    </p><h3><a name="id2714"></a>SQL Modes</h3><p>
+    </p><h3><a name="id2700"></a>SQL Modes</h3><p>
       MySQL supports so-called SQL Modes. which change the behavior of
       the server globally or per connection. For example, to have
       warnings raised as errors, set <code class="literal">sql_mode</code> to
       <code class="literal">TRADITIONAL</code>. For more information, see
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html" target="_top">Server SQL Modes</a>.
-    </p><h3><a name="id2719"></a>Troubleshooting and Error Handling</h3><p>
+    </p><h3><a name="id2705"></a>Troubleshooting and Error Handling</h3><p>
       Warnings generated by queries are fetched automatically when
       <code class="literal">get_warnings</code> is set to <code class="literal">True</code>.
       You can also immediately raise an exception by setting
@@ -2064,7 +2009,7 @@ asyncio.run(test())
     </p><p>
       To set a timeout value for connections, use
       <code class="literal">connection_timeout</code>.
-    </p><h3><a name="id2728"></a>Enabling and Disabling Features Using Client Flags</h3><p>
+    </p><h3><a name="id2714"></a>Enabling and Disabling Features Using Client Flags</h3><p>
       MySQL uses <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-real-connect.html" target="_top">client flags</a>
       to enable or disable features. Using the
       <code class="literal">client_flags</code> argument, you have control of what
@@ -2081,7 +2026,7 @@ print '\n'.join(ClientFlag.get_full_info
       <code class="literal">LONG_FLAG</code>:
     </p><pre data-lang="python" class="programlisting">flags = [ClientFlag.FOUND_ROWS, -ClientFlag.LONG_FLAG]
 mysql.connector.connect(client_flags=flags)
-</pre><h3><a name="id2739"></a>Result Set Handling</h3><p>
+</pre><h3><a name="id2725"></a>Result Set Handling</h3><p>
       By default, MySQL Connector/Python does not buffer or prefetch results. This means
       that after a query is executed, your program is responsible for
       fetching the data. This avoids excessive memory use when queries
@@ -2098,7 +2043,7 @@ mysql.connector.connect(client_flags=fla
       <code class="literal">True</code>. The result is that all results are read,
       which for large result sets can be slow. (In this case, it might
       be preferable to close and reopen the connection.)
-    </p><h3><a name="id2747"></a>Type Conversions</h3><p>
+    </p><h3><a name="id2733"></a>Type Conversions</h3><p>
       By default, MySQL types in result sets are converted automatically
       to Python types. For example, a <code class="literal">DATETIME</code> column
       value becomes a
@@ -2106,7 +2051,7 @@ mysql.connector.connect(client_flags=fla
       object. To disable conversion, set the <code class="literal">raw</code>
       option to <code class="literal">True</code>. You might do this to get better
       performance or perform different types of conversion yourself.
-    </p><h3><a name="id2753"></a>Connecting through SSL</h3><p>
+    </p><h3><a name="id2739"></a>Connecting through SSL</h3><p>
       Using SSL connections is possible when your
       <a class="ulink" href="http://docs.python.org/library/ssl.html" target="_top">Python
       installation supports SSL</a>, that is, when it is compiled
@@ -2153,7 +2098,7 @@ cur.execute("SHOW STATUS LIKE 'Ssl_ciphe
 print(cur.fetchone())
 cur.close()
 cnx.close()
-</pre><h3><a name="id2772"></a>Connection Pooling</h3><p>
+</pre><h3><a name="id2758"></a>Connection Pooling</h3><p>
       With either the <code class="literal">pool_name</code> or
       <code class="literal">pool_size</code> argument present, Connector/Python creates the
       new pool. If the <code class="literal">pool_name</code> argument is not
@@ -2171,19 +2116,19 @@ cnx.close()
     </p><p>
       For additional information about connection pooling, see
       <a class="xref" href="#connector-python-connection-pooling" title="9.5 Connector/Python Connection Pooling">Section 9.5, “Connector/Python Connection Pooling”</a>.
-    </p><h3><a name="id2787"></a>Protocol Compression</h3><p>
+    </p><h3><a name="id2773"></a>Protocol Compression</h3><p>
       The boolean <code class="literal">compress</code> argument indicates whether
       to use the compressed client/server protocol (default
       <code class="literal">False</code>). This provides an easier alternative to
       setting the <code class="literal">ClientFlag.COMPRESS</code> flag. This
       argument is available as of Connector/Python 1.1.2.
-    </p><h3><a name="id2792"></a>Converter Class</h3><p>
+    </p><h3><a name="id2778"></a>Converter Class</h3><p>
       The <code class="literal">converter_class</code> argument takes a class and
       sets it when configuring the connection. An
       <code class="literal">AttributeError</code> is raised if the custom
       converter class is not a subclass of
       <code class="literal">conversion.MySQLConverterBase</code>.
-    </p><h3><a name="id2797"></a>Server Failover</h3><p>
+    </p><h3><a name="id2783"></a>Server Failover</h3><p>
       The <code class="literal">connect()</code> method accepts a
       <code class="literal">failover</code> argument that provides information to
       use for server failover in the event of connection failures. The
@@ -2196,7 +2141,7 @@ cnx.close()
       <code class="literal">database</code>, <code class="literal">pool_name</code>,
       <code class="literal">pool_size</code>. This failover option was added in
       Connector/Python 1.2.1.
-    </p><h3><a name="id2809"></a>Option File Support</h3><p>
+    </p><h3><a name="id2795"></a>Option File Support</h3><p>
       As of Connector/Python 2.0.0, option files are supported using two options
       for <code class="literal">connect()</code>:
     </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
@@ -2216,7 +2161,7 @@ cnx.close()
         </p></li></ul></div><p>
       For more information, see
       <a class="xref" href="#connector-python-option-files" title="7.2 Connector/Python Option-File Support">Section 7.2, “Connector/Python Option-File Support”</a>.
-    </p><h3><a name="id2824"></a>LOAD DATA LOCAL INFILE</h3><p>
+    </p><h3><a name="id2810"></a>LOAD DATA LOCAL INFILE</h3><p>
       Prior to Connector/Python 2.0.0, to enable use of
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/load-data.html" target="_top"><code class="literal">LOAD DATA LOCAL
       INFILE</code></a>, clients had to explicitly set the
@@ -2225,7 +2170,7 @@ cnx.close()
       <code class="literal">allow_local_infile</code> connection option can be set
       to <code class="literal">False</code> at connect time (the default is
       <code class="literal">True</code>).
-    </p><h3><a name="id2832"></a>Compatibility with Other Connection Interfaces</h3><p>
+    </p><h3><a name="id2818"></a>Compatibility with Other Connection Interfaces</h3><p>
       <code class="literal">passwd</code>, <code class="literal">db</code> and
       <code class="literal">connect_timeout</code> are valid for compatibility
       with other MySQL interfaces and are respectively the same as
@@ -2234,7 +2179,7 @@ cnx.close()
       Data source name syntax or <code class="literal">dsn</code> is not used; if
       specified, it raises a <code class="literal">NotSupportedError</code>
       exception.
-    </p><h3><a name="id2842"></a>Client/Server Protocol Implementation</h3><p>
+    </p><h3><a name="id2828"></a>Client/Server Protocol Implementation</h3><p>
       Connector/Python can use a pure Python interface to MySQL, or a C Extension
       that uses the MySQL C client library. The
       <code class="literal">use_pure</code>
@@ -2341,7 +2286,7 @@ database=cpyapp
       For other option groups, Connector/Python ignores unrecognized options.
     </p><p>
       It is not an error for a named option group not to exist.
-    </p><h3><a name="id2910"></a>Option Parsing</h3><p>
+    </p><h3><a name="id2896"></a>Option Parsing</h3><p>
       Connector/Python reads the option values in option files as strings, and
       attempts to parse them using Python's
       <code class="literal">ast.literal_eval</code> function. This allows
@@ -2421,7 +2366,7 @@ failover=({'host': '203.0.113.1', 'port'
         but Python scripts are unable to use it, try setting your
         <code class="literal">DYLD_LIBRARY_PATH</code> environment variable the
         directory containing the C client library. For example:
-      </p><a class="indexterm" name="id2962"></a><a class="indexterm" name="id2964"></a><pre data-lang="terminal" class="programlisting">export DYLD_LIBRARY_PATH=/usr/local/mysql/lib   (for sh)
+      </p><a class="indexterm" name="id2948"></a><a class="indexterm" name="id2950"></a><pre data-lang="terminal" class="programlisting">export DYLD_LIBRARY_PATH=/usr/local/mysql/lib   (for sh)
 setenv DYLD_LIBRARY_PATH /usr/local/mysql/lib   (for tcsh)
 </pre><p>
         If you built the C Extension from source, this directory should
@@ -2548,8 +2493,8 @@ pip install mysql-connector-python
 </pre><p>
         Or pass in [telemetry] when installing Connector/Python to perform the
         same actions except it installs a specific and tested
-        OpenTelemetry version, which for Connector/Python 9.0.0 is
-        OpenTelemetry v1.18.0:
+        OpenTelemetry version, which for Connector/Python 9.4.0 and later is
+        OpenTelemetry v1.33.1:
       </p><pre data-lang="terminal" class="programlisting">pip install mysql-connector-python[telemetry]
 </pre><p>
         Connector/Python 8.1.0 through 8.4.0 included an [opentelemetry] option
@@ -2758,7 +2703,7 @@ with cnx.cursor() as cur:
         cur.execute(code.read())
 
     # Fetch result set, see other examples for additional information 
-</pre><h3><a name="id3099"></a>Multiple Statement Result Mapping</h3><p>
+</pre><h3><a name="id3085"></a>Multiple Statement Result Mapping</h3><p>
       The optional <code class="literal">map_results</code> option (defaults to
       <code class="literal">False</code>) makes each statement relate to its
       corresponding result set.
@@ -2833,7 +2778,7 @@ star plus slash: */
           actual statement delimiter; such as names for tables, columns,
           variables, in comments, and so on. Example:
         </p><pre data-lang="sql" class="programlisting">CREATE TABLE `delimiter` (begin INT, end INT); -- I am a `DELimiTer` comment
-</pre></li></ul></div><h3><a name="id3131"></a>Fetching Result Sets</h3><p>
+</pre></li></ul></div><h3><a name="id3117"></a>Fetching Result Sets</h3><p>
       Basic usage (mapping disabled):
     </p><pre data-lang="python" class="programlisting">sql_operation = """
 SET @a=1, @b='2024-02-01';
@@ -2913,7 +2858,7 @@ with cnx.cursor() as cur:
       statement that caused the current result set. Therefore, the value
       of statement changes accordingly while the result sets are
       traversed.
-    </p><h3><a name="id3148"></a>Shortcut for consuming result sets</h3><p>
+    </p><h3><a name="id3134"></a>Shortcut for consuming result sets</h3><p>
       A fetch-related API command shortcut is available to consume
       result sets, this example is equivalent to the previously
       presented workflow.
@@ -2949,7 +2894,7 @@ with cnx.cursor() as cur:
     </p><p>
       Here are code examples that integrate
       <code class="literal">mysql.connector.aio</code> functionality:
-    </p><h3><a name="id3162"></a>Basic Usage:</h3><pre data-lang="python" class="programlisting">from mysql.connector.aio import connect
+    </p><h3><a name="id3148"></a>Basic Usage:</h3><pre data-lang="python" class="programlisting">from mysql.connector.aio import connect
 
 # Connect to a MySQL server and get a cursor
 cnx = await connect(user="myuser", password="mypass")
@@ -2965,7 +2910,7 @@ print(results)
 # Close cursor and connection
 await cur.close()
 await cnx.close()
-</pre><h3><a name="id3164"></a>Usage with context managers:</h3><pre data-lang="python" class="programlisting">from mysql.connector.aio import connect
+</pre><h3><a name="id3150"></a>Usage with context managers:</h3><pre data-lang="python" class="programlisting">from mysql.connector.aio import connect
 
 # Connect to a MySQL server and get a cursor
 async with await connect(user="myuser", password="mypass") as cnx:
@@ -2976,7 +2921,7 @@ async with await connect(user="myuser",
         # Retrieve the results of the query asynchronously
         results = await cur.fetchall()
         print(results)
-</pre><h3><a name="id3166"></a>Running Multiple Tasks Asynchronously</h3><p>
+</pre><h3><a name="id3152"></a>Running Multiple Tasks Asynchronously</h3><p>
       This example showcases how to run tasks asynchronously and the
       usage of to_thread, which is the backbone to asynchronously run
       blocking functions:
@@ -3187,7 +3132,7 @@ if __name__ == "__main__":
         active thread executes all of the jobs. Asynchronous execution
         is about completing other jobs while waiting for the result of
         an I/O operation.
-      </p></div><h3><a name="id3188"></a>Asynchronous MySQL Queries</h3><p>
+      </p></div><h3><a name="id3174"></a>Asynchronous MySQL Queries</h3><p>
       This is a similar example that uses MySQL queries instead of
       generic jobs.
     </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
@@ -3746,7 +3691,7 @@ cnxpool.set_config(**dbconfig)
       that provides a Django back end for MySQL. This back end supports
       new features found as of MySQL 5.6 such as fractional seconds
       support for temporal data types.
-    </p><h3><a name="id3297"></a>Django Configuration</h3><p>
+    </p><h3><a name="id3283"></a>Django Configuration</h3><p>
       Django uses a configuration file named
       <code class="filename">settings.py</code> that contains a variable called
       <code class="literal">DATABASES</code> (see
@@ -3771,7 +3716,7 @@ cnxpool.set_config(**dbconfig)
 </pre><p>
       It is possible to add more connection arguments using
       <code class="literal">OPTIONS</code>.
-    </p><h3><a name="id3306"></a>Support for MySQL Features</h3><p>
+    </p><h3><a name="id3292"></a>Support for MySQL Features</h3><p>
       Django can launch the MySQL client application
       <span class="command"><strong>mysql</strong></span>. When the Connector/Python back end does this, it
       arranges for the <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_sql_mode" target="_top"><code class="literal">sql_mode</code></a> system
@@ -3817,10 +3762,10 @@ cnxpool.set_config(**dbconfig)
       client_error
   protocol
   utils
-</pre><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysql-connector"></a>10.1 mysql.connector Module</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysql-connector-connect">10.1.1 mysql.connector.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-apilevel">10.1.2 mysql.connector.apilevel Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-paramstyle">10.1.3 mysql.connector.paramstyle Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-threadsafety">10.1.4 mysql.connector.threadsafety Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version">10.1.5 mysql.connector.__version__ Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version-info">10.1.6 mysql.connector.__version_info__ Property</a></span></dt></dl></div><a class="indexterm" name="id3330"></a><a class="indexterm" name="id3332"></a><p>
+</pre><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysql-connector"></a>10.1 mysql.connector Module</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysql-connector-connect">10.1.1 mysql.connector.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-apilevel">10.1.2 mysql.connector.apilevel Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-paramstyle">10.1.3 mysql.connector.paramstyle Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-threadsafety">10.1.4 mysql.connector.threadsafety Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version">10.1.5 mysql.connector.__version__ Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysql-connector-version-info">10.1.6 mysql.connector.__version_info__ Property</a></span></dt></dl></div><a class="indexterm" name="id3316"></a><a class="indexterm" name="id3318"></a><p>
       The <code class="literal">mysql.connector</code> module provides top-level
       methods and properties.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-connect"></a>10.1.1 mysql.connector.connect() Method</h3></div></div></div><a class="indexterm" name="id3338"></a><a class="indexterm" name="id3340"></a><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-connect"></a>10.1.1 mysql.connector.connect() Method</h3></div></div></div><a class="indexterm" name="id3324"></a><a class="indexterm" name="id3326"></a><p>
         This method sets up a connection, establishing a session with
         the MySQL server. If no arguments are given, it uses the already
         configured or default values. For a complete list of possible
@@ -3835,36 +3780,36 @@ cnx = MySQLConnection(user='joe', databa
 </pre><p>
         For descriptions of connection methods and properties, see
         <a class="xref" href="#connector-python-api-mysqlconnection" title="10.2 connection.MySQLConnection Class">Section 10.2, “connection.MySQLConnection Class”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-apilevel"></a>10.1.2 mysql.connector.apilevel Property</h3></div></div></div><a class="indexterm" name="id3352"></a><a class="indexterm" name="id3354"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-apilevel"></a>10.1.2 mysql.connector.apilevel Property</h3></div></div></div><a class="indexterm" name="id3338"></a><a class="indexterm" name="id3340"></a><p>
         This property is a string that indicates the supported DB API
         level.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.apilevel
-'2.0'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-paramstyle"></a>10.1.3 mysql.connector.paramstyle Property</h3></div></div></div><a class="indexterm" name="id3360"></a><a class="indexterm" name="id3362"></a><p>
+'2.0'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-paramstyle"></a>10.1.3 mysql.connector.paramstyle Property</h3></div></div></div><a class="indexterm" name="id3346"></a><a class="indexterm" name="id3348"></a><p>
         This property is a string that indicates the Connector/Python default
         parameter style.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.paramstyle
-'pyformat'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-threadsafety"></a>10.1.4 mysql.connector.threadsafety Property</h3></div></div></div><a class="indexterm" name="id3368"></a><a class="indexterm" name="id3370"></a><p>
+'pyformat'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-threadsafety"></a>10.1.4 mysql.connector.threadsafety Property</h3></div></div></div><a class="indexterm" name="id3354"></a><a class="indexterm" name="id3356"></a><p>
         This property is an integer that indicates the supported level
         of thread safety provided by Connector/Python.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.threadsafety
-1</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-version"></a>10.1.5 mysql.connector.__version__ Property</h3></div></div></div><a class="indexterm" name="id3376"></a><a class="indexterm" name="id3378"></a><p>
+1</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-version"></a>10.1.5 mysql.connector.__version__ Property</h3></div></div></div><a class="indexterm" name="id3362"></a><a class="indexterm" name="id3364"></a><p>
         This property indicates the Connector/Python version as a string. It is
         available as of Connector/Python 1.1.0.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.__version__
-'1.1.0'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-version-info"></a>10.1.6 mysql.connector.__version_info__ Property</h3></div></div></div><a class="indexterm" name="id3384"></a><a class="indexterm" name="id3386"></a><p>
+'1.1.0'</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysql-connector-version-info"></a>10.1.6 mysql.connector.__version_info__ Property</h3></div></div></div><a class="indexterm" name="id3370"></a><a class="indexterm" name="id3372"></a><p>
         This property indicates the Connector/Python version as an array of version
         components. It is available as of Connector/Python 1.1.0.
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; mysql.connector.__version_info__
-(1, 1, 0, 'a', 0)</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlconnection"></a>10.2 connection.MySQLConnection Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlconnection-constructor">10.2.1 connection.MySQLConnection() Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-close">10.2.2 MySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-commit">10.2.3 MySQLConnection.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-config">10.2.4 MySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connect">10.2.5 MySQLConnection.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cursor">10.2.6 MySQLConnection.cursor() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-change-user">10.2.7 MySQLConnection.cmd_change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-debug">10.2.8 MySQLConnection.cmd_debug() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-init-db">10.2.9 MySQLConnection.cmd_init_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-ping">10.2.10 MySQLConnection.cmd_ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-info">10.2.11 MySQLConnection.cmd_process_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-kill">10.2.12 MySQLConnection.cmd_process_kill() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query">10.2.13 MySQLConnection.cmd_query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query-iter">10.2.14 MySQLConnection.cmd_query_iter() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-quit">10.2.15 MySQLConnection.cmd_quit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-refresh">10.2.16 MySQLConnection.cmd_refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-reset-connection">10.2.17 MySQLConnection.cmd_reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-shutdown">10.2.18 MySQLConnection.cmd_shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-statistics">10.2.19 MySQLConnection.cmd_statistics() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-disconnect">10.2.20 MySQLConnection.disconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-row">10.2.21 MySQLConnection.get_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-rows">10.2.22 MySQLConnection.get_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-info">10.2.23 MySQLConnection.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-version">10.2.24 MySQLConnection.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-is-connected">10.2.25 MySQLConnection.is_connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-isset-client-flag">10.2.26 MySQLConnection.isset_client_flag() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-ping">10.2.27 MySQLConnection.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reconnect">10.2.28 MySQLConnection.reconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reset-session">10.2.29 MySQLConnection.reset_session() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-rollback">10.2.30 MySQLConnection.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-charset-collation">10.2.31 MySQLConnection.set_charset_collation() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-client-flags">10.2.32 MySQLConnection.set_client_flags() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-shutdown">10.2.33 MySQLConnection.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-start-transaction">10.2.34 MySQLConnection.start_transaction() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-autocommit">10.2.35 MySQLConnection.autocommit Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unread-results">10.2.36 MySQLConnection.unread_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-can-consume-results">10.2.37 MySQLConnection.can_consume_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-charset">10.2.38 MySQLConnection.charset Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-client-flags">10.2.39 MySQLConnection.client_flags Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-collation">10.2.40 MySQLConnection.collation Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connected">10.2.41 MySQLConnection.connected Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connection-id">10.2.42 MySQLConnection.connection_id Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-converter-class">10.2.43 MySQLConnection.converter-class Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-database">10.2.44 MySQLConnection.database Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-warnings">10.2.45 MySQLConnection.get_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-in-transaction">10.2.46 MySQLConnection.in_transaction Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-raise-on-warnings">10.2.47 MySQLConnection.raise_on_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-host">10.2.48 MySQLConnection.server_host Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-info">10.2.49 MySQLConnection.server_info Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-port">10.2.50 MySQLConnection.server_port Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-version">10.2.51 MySQLConnection.server_version Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-sql-mode">10.2.52 MySQLConnection.sql_mode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-time-zone">10.2.53 MySQLConnection.time_zone Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-use-unicode">10.2.54 MySQLConnection.use_unicode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unix-socket">10.2.55 MySQLConnection.unix_socket Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-user">10.2.56 MySQLConnection.user Property</a></span></dt></dl></div><a class="indexterm" name="id3392"></a><a class="indexterm" name="id3394"></a><p>
+(1, 1, 0, 'a', 0)</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlconnection"></a>10.2 connection.MySQLConnection Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlconnection-constructor">10.2.1 connection.MySQLConnection() Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-close">10.2.2 MySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-commit">10.2.3 MySQLConnection.commit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-config">10.2.4 MySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connect">10.2.5 MySQLConnection.connect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cursor">10.2.6 MySQLConnection.cursor() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-change-user">10.2.7 MySQLConnection.cmd_change_user() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-debug">10.2.8 MySQLConnection.cmd_debug() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-init-db">10.2.9 MySQLConnection.cmd_init_db() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-ping">10.2.10 MySQLConnection.cmd_ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-info">10.2.11 MySQLConnection.cmd_process_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-process-kill">10.2.12 MySQLConnection.cmd_process_kill() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query">10.2.13 MySQLConnection.cmd_query() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-query-iter">10.2.14 MySQLConnection.cmd_query_iter() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-quit">10.2.15 MySQLConnection.cmd_quit() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-refresh">10.2.16 MySQLConnection.cmd_refresh() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-reset-connection">10.2.17 MySQLConnection.cmd_reset_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-shutdown">10.2.18 MySQLConnection.cmd_shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-cmd-statistics">10.2.19 MySQLConnection.cmd_statistics() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-disconnect">10.2.20 MySQLConnection.disconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-row">10.2.21 MySQLConnection.get_row() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-rows">10.2.22 MySQLConnection.get_rows() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-info">10.2.23 MySQLConnection.get_server_info() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-server-version">10.2.24 MySQLConnection.get_server_version() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-is-connected">10.2.25 MySQLConnection.is_connected() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-isset-client-flag">10.2.26 MySQLConnection.isset_client_flag() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-ping">10.2.27 MySQLConnection.ping() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reconnect">10.2.28 MySQLConnection.reconnect() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-reset-session">10.2.29 MySQLConnection.reset_session() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-rollback">10.2.30 MySQLConnection.rollback() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-charset-collation">10.2.31 MySQLConnection.set_charset_collation() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-set-client-flags">10.2.32 MySQLConnection.set_client_flags() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-shutdown">10.2.33 MySQLConnection.shutdown() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-start-transaction">10.2.34 MySQLConnection.start_transaction() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-autocommit">10.2.35 MySQLConnection.autocommit Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unread-results">10.2.36 MySQLConnection.unread_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-can-consume-results">10.2.37 MySQLConnection.can_consume_results Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-charset">10.2.38 MySQLConnection.charset Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-client-flags">10.2.39 MySQLConnection.client_flags Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-collation">10.2.40 MySQLConnection.collation Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connected">10.2.41 MySQLConnection.connected Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-connection-id">10.2.42 MySQLConnection.connection_id Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-converter-class">10.2.43 MySQLConnection.converter-class Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-database">10.2.44 MySQLConnection.database Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-get-warnings">10.2.45 MySQLConnection.get_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-in-transaction">10.2.46 MySQLConnection.in_transaction Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-raise-on-warnings">10.2.47 MySQLConnection.raise_on_warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-host">10.2.48 MySQLConnection.server_host Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-info">10.2.49 MySQLConnection.server_info Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-port">10.2.50 MySQLConnection.server_port Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-server-version">10.2.51 MySQLConnection.server_version Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-sql-mode">10.2.52 MySQLConnection.sql_mode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-time-zone">10.2.53 MySQLConnection.time_zone Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-use-unicode">10.2.54 MySQLConnection.use_unicode Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-unix-socket">10.2.55 MySQLConnection.unix_socket Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnection-user">10.2.56 MySQLConnection.user Property</a></span></dt></dl></div><a class="indexterm" name="id3378"></a><a class="indexterm" name="id3380"></a><p>
       The <code class="literal">MySQLConnection</code> class is used to open and
       manage a connection to a MySQL server. It also used to send
       commands and SQL statements and read the results.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-constructor"></a>10.2.1 connection.MySQLConnection() Constructor</h3></div></div></div><a class="indexterm" name="id3400"></a><a class="indexterm" name="id3402"></a><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-constructor"></a>10.2.1 connection.MySQLConnection() Constructor</h3></div></div></div><a class="indexterm" name="id3386"></a><a class="indexterm" name="id3388"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx = MySQLConnection(**kwargs)
 </pre><p>
@@ -3874,7 +3819,7 @@ cnx = MySQLConnection(user='joe', databa
       </p><p>
         For a complete list of arguments, see
         <a class="xref" href="#connector-python-connectargs" title="7.1 Connector/Python Connection Arguments">Section 7.1, “Connector/Python Connection Arguments”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-close"></a>10.2.2 MySQLConnection.close() Method</h3></div></div></div><a class="indexterm" name="id3412"></a><a class="indexterm" name="id3414"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-close"></a>10.2.2 MySQLConnection.close() Method</h3></div></div></div><a class="indexterm" name="id3398"></a><a class="indexterm" name="id3400"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.close()
 </pre><p>
@@ -3887,7 +3832,7 @@ cnx = MySQLConnection(user='joe', databa
         returns it to the pool and makes it available for subsequent
         connection requests. See
         <a class="xref" href="#connector-python-connection-pooling" title="9.5 Connector/Python Connection Pooling">Section 9.5, “Connector/Python Connection Pooling”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-commit"></a>10.2.3 MySQLConnection.commit() Method</h3></div></div></div><a class="indexterm" name="id3427"></a><a class="indexterm" name="id3429"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-commit"></a>10.2.3 MySQLConnection.commit() Method</h3></div></div></div><a class="indexterm" name="id3413"></a><a class="indexterm" name="id3415"></a><p>
         This method sends a <code class="literal">COMMIT</code> statement to the
         MySQL server, committing the current transaction. Since by
         default Connector/Python does not autocommit, it is important to call this
@@ -3899,7 +3844,7 @@ cnx = MySQLConnection(user='joe', databa
         To roll back instead and discard modifications, see the
         <a class="link" href="#connector-python-api-mysqlconnection-rollback" title="10.2.30 MySQLConnection.rollback() Method">rollback()</a>
         method.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-config"></a>10.2.4 MySQLConnection.config() Method</h3></div></div></div><a class="indexterm" name="id3438"></a><a class="indexterm" name="id3440"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-config"></a>10.2.4 MySQLConnection.config() Method</h3></div></div></div><a class="indexterm" name="id3424"></a><a class="indexterm" name="id3426"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.config(**kwargs)
 </pre><p>
@@ -3925,7 +3870,7 @@ cnx.reconnect()
         For a connection obtained from a connection pool,
         <code class="literal">config()</code> raises an exception. See
         <a class="xref" href="#connector-python-connection-pooling" title="9.5 Connector/Python Connection Pooling">Section 9.5, “Connector/Python Connection Pooling”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connect"></a>10.2.5 MySQLConnection.connect() Method</h3></div></div></div><a class="indexterm" name="id3462"></a><a class="indexterm" name="id3464"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connect"></a>10.2.5 MySQLConnection.connect() Method</h3></div></div></div><a class="indexterm" name="id3448"></a><a class="indexterm" name="id3450"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">MySQLConnection.connect(**kwargs)
 </pre><p>
@@ -3946,7 +3891,7 @@ cnx.reconnect()
         pooled connection differs from an unpooled connection as
         described in
         <a class="xref" href="#connector-python-connection-pooling" title="9.5 Connector/Python Connection Pooling">Section 9.5, “Connector/Python Connection Pooling”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cursor"></a>10.2.6 MySQLConnection.cursor() Method</h3></div></div></div><a class="indexterm" name="id3482"></a><a class="indexterm" name="id3484"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cursor"></a>10.2.6 MySQLConnection.cursor() Method</h3></div></div></div><a class="indexterm" name="id3468"></a><a class="indexterm" name="id3470"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor = cnx.cursor([arg=value[, arg=value]...])
 </pre><p>
@@ -4013,7 +3958,7 @@ cnx.reconnect()
           </p></li><li class="listitem"><p>
             If buffered and raw:
             <code class="literal">MySQLCursorBufferedRaw</code>
-          </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-change-user"></a>10.2.7 MySQLConnection.cmd_change_user() Method</h3></div></div></div><a class="indexterm" name="id3546"></a><a class="indexterm" name="id3548"></a><p>
+          </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-change-user"></a>10.2.7 MySQLConnection.cmd_change_user() Method</h3></div></div></div><a class="indexterm" name="id3532"></a><a class="indexterm" name="id3534"></a><p>
         Changes the user using <code class="literal">username</code> and
         <code class="literal">password</code>. It also causes the specified
         <code class="literal">database</code> to become the default (current)
@@ -4024,13 +3969,13 @@ cnx.reconnect()
       </p><pre data-lang="python" class="programlisting">cnx.cmd_change_user(username='', password='', database='', charset=33)
 </pre><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-debug"></a>10.2.8 MySQLConnection.cmd_debug() Method</h3></div></div></div><a class="indexterm" name="id3560"></a><a class="indexterm" name="id3562"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-debug"></a>10.2.8 MySQLConnection.cmd_debug() Method</h3></div></div></div><a class="indexterm" name="id3546"></a><a class="indexterm" name="id3548"></a><p>
         Instructs the server to write debugging information to the error
         log. The connected user must have the
         <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_super" target="_top"><code class="literal">SUPER</code></a> privilege.
       </p><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-init-db"></a>10.2.9 MySQLConnection.cmd_init_db() Method</h3></div></div></div><a class="indexterm" name="id3570"></a><a class="indexterm" name="id3572"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-init-db"></a>10.2.9 MySQLConnection.cmd_init_db() Method</h3></div></div></div><a class="indexterm" name="id3556"></a><a class="indexterm" name="id3558"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_init_db(db_name)
 </pre><p>
@@ -4040,7 +3985,7 @@ cnx.reconnect()
         qualifier.
       </p><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-ping"></a>10.2.10 MySQLConnection.cmd_ping() Method</h3></div></div></div><a class="indexterm" name="id3580"></a><a class="indexterm" name="id3582"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-ping"></a>10.2.10 MySQLConnection.cmd_ping() Method</h3></div></div></div><a class="indexterm" name="id3566"></a><a class="indexterm" name="id3568"></a><p>
         Checks whether the connection to the server is working.
       </p><p>
         This method is not to be used directly. Use
@@ -4050,14 +3995,14 @@ cnx.reconnect()
         instead.
       </p><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-process-info"></a>10.2.11 MySQLConnection.cmd_process_info() Method</h3></div></div></div><a class="indexterm" name="id3591"></a><a class="indexterm" name="id3593"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-process-info"></a>10.2.11 MySQLConnection.cmd_process_info() Method</h3></div></div></div><a class="indexterm" name="id3577"></a><a class="indexterm" name="id3579"></a><p>
         This method raises the NotSupportedError exception. Instead, use
         the <code class="literal">SHOW PROCESSLIST</code> statement or query the
         tables found in the database
         <code class="literal">INFORMATION_SCHEMA</code>.
       </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This MySQL Server functionality is deprecated.
-        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-process-kill"></a>10.2.12 MySQLConnection.cmd_process_kill() Method</h3></div></div></div><a class="indexterm" name="id3603"></a><a class="indexterm" name="id3605"></a><p>
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-process-kill"></a>10.2.12 MySQLConnection.cmd_process_kill() Method</h3></div></div></div><a class="indexterm" name="id3589"></a><a class="indexterm" name="id3591"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_process_kill(mysql_pid)
 </pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
@@ -4072,7 +4017,7 @@ cnx.reconnect()
         The following two lines have the same effect:
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; cnx.cmd_process_kill(123)
-&gt;&gt;&gt; cnx.cmd_query('KILL 123')</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-query"></a>10.2.13 MySQLConnection.cmd_query() Method</h3></div></div></div><a class="indexterm" name="id3620"></a><a class="indexterm" name="id3622"></a><p>
+&gt;&gt;&gt; cnx.cmd_query('KILL 123')</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-query"></a>10.2.13 MySQLConnection.cmd_query() Method</h3></div></div></div><a class="indexterm" name="id3606"></a><a class="indexterm" name="id3608"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_query(statement)
 </pre><p>
@@ -4093,7 +4038,7 @@ cnx.reconnect()
         results are found.
       </p><p>
         Returns a dictionary.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-query-iter"></a>10.2.14 MySQLConnection.cmd_query_iter() Method</h3></div></div></div><a class="indexterm" name="id3637"></a><a class="indexterm" name="id3639"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-query-iter"></a>10.2.14 MySQLConnection.cmd_query_iter() Method</h3></div></div></div><a class="indexterm" name="id3623"></a><a class="indexterm" name="id3625"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_query_iter(statement)
 </pre><p>
@@ -4115,12 +4060,12 @@ for result in cnx.cmd_query_iter(stateme
     # do something useful with INSERT result
 </pre><p>
         Returns a generator object.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-quit"></a>10.2.15 MySQLConnection.cmd_quit() Method</h3></div></div></div><a class="indexterm" name="id3651"></a><a class="indexterm" name="id3653"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-quit"></a>10.2.15 MySQLConnection.cmd_quit() Method</h3></div></div></div><a class="indexterm" name="id3637"></a><a class="indexterm" name="id3639"></a><p>
         This method sends a <code class="literal">QUIT</code> command to the MySQL
         server, closing the current connection. Since there is no
         response from the MySQL server, the packet that was sent is
         returned.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-refresh"></a>10.2.16 MySQLConnection.cmd_refresh() Method</h3></div></div></div><a class="indexterm" name="id3659"></a><a class="indexterm" name="id3661"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-refresh"></a>10.2.16 MySQLConnection.cmd_refresh() Method</h3></div></div></div><a class="indexterm" name="id3645"></a><a class="indexterm" name="id3647"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_refresh(options)
 </pre><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
@@ -4141,7 +4086,7 @@ for result in cnx.cmd_query_iter(stateme
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; from mysql.connector import RefreshOption
 &gt;&gt;&gt; refresh = RefreshOption.LOG | RefreshOption.THREADS
-&gt;&gt;&gt; cnx.cmd_refresh(refresh)</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-reset-connection"></a>10.2.17 MySQLConnection.cmd_reset_connection() Method</h3></div></div></div><a class="indexterm" name="id3679"></a><a class="indexterm" name="id3681"></a><p>
+&gt;&gt;&gt; cnx.cmd_refresh(refresh)</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-reset-connection"></a>10.2.17 MySQLConnection.cmd_reset_connection() Method</h3></div></div></div><a class="indexterm" name="id3665"></a><a class="indexterm" name="id3667"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.cmd_reset_connection()
 </pre><p>
@@ -4157,18 +4102,18 @@ for result in cnx.cmd_query_iter(stateme
         by reauthenticating, which is more expensive.
       </p><p>
         This method was added in Connector/Python 1.2.1.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-shutdown"></a>10.2.18 MySQLConnection.cmd_shutdown() Method</h3></div></div></div><a class="indexterm" name="id3694"></a><a class="indexterm" name="id3696"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-shutdown"></a>10.2.18 MySQLConnection.cmd_shutdown() Method</h3></div></div></div><a class="indexterm" name="id3680"></a><a class="indexterm" name="id3682"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This MySQL Server functionality is deprecated.
         </p></div><p>
         Asks the database server to shut down. The connected user must
         have the <code class="literal">SHUTDOWN</code> privilege.
       </p><p>
         Returns a dictionary containing the OK packet information.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-statistics"></a>10.2.19 MySQLConnection.cmd_statistics() Method</h3></div></div></div><a class="indexterm" name="id3706"></a><a class="indexterm" name="id3708"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-cmd-statistics"></a>10.2.19 MySQLConnection.cmd_statistics() Method</h3></div></div></div><a class="indexterm" name="id3692"></a><a class="indexterm" name="id3694"></a><p>
         Returns a dictionary containing information about the MySQL
         server including uptime in seconds and the number of running
         threads, questions, reloads, and open tables.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-disconnect"></a>10.2.20 MySQLConnection.disconnect() Method</h3></div></div></div><a class="indexterm" name="id3713"></a><a class="indexterm" name="id3715"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-disconnect"></a>10.2.20 MySQLConnection.disconnect() Method</h3></div></div></div><a class="indexterm" name="id3699"></a><a class="indexterm" name="id3701"></a><p>
         This method tries to send a <code class="literal">QUIT</code> command and
         close the socket. It raises no exceptions.
       </p><p>
@@ -4178,7 +4123,7 @@ for result in cnx.cmd_query_iter(stateme
         To shut down the connection without sending a
         <code class="literal">QUIT</code> command first, use
         <a class="link" href="#connector-python-api-mysqlconnection-shutdown" title="10.2.33 MySQLConnection.shutdown() Method"><code class="literal">shutdown()</code></a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-row"></a>10.2.21 MySQLConnection.get_row() Method</h3></div></div></div><a class="indexterm" name="id3727"></a><a class="indexterm" name="id3729"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-row"></a>10.2.21 MySQLConnection.get_row() Method</h3></div></div></div><a class="indexterm" name="id3713"></a><a class="indexterm" name="id3715"></a><p>
         This method retrieves the next row of a query result set,
         returning a tuple.
       </p><p>
@@ -4195,7 +4140,7 @@ for result in cnx.cmd_query_iter(stateme
         The <code class="literal">get_row()</code> method is used by
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class">MySQLCursor</a>
         to fetch rows.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-rows"></a>10.2.22 MySQLConnection.get_rows() Method</h3></div></div></div><a class="indexterm" name="id3748"></a><a class="indexterm" name="id3750"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-rows"></a>10.2.22 MySQLConnection.get_rows() Method</h3></div></div></div><a class="indexterm" name="id3734"></a><a class="indexterm" name="id3736"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.get_rows(count=None)
 </pre><p>
@@ -4221,7 +4166,7 @@ for result in cnx.cmd_query_iter(stateme
         uses the <code class="literal">get_rows()</code> method to fetch rows.
       </p><p>
         Returns a tuple.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-server-info"></a>10.2.23 MySQLConnection.get_server_info() Method</h3></div></div></div><a class="indexterm" name="id3773"></a><a class="indexterm" name="id3775"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-server-info"></a>10.2.23 MySQLConnection.get_server_info() Method</h3></div></div></div><a class="indexterm" name="id3759"></a><a class="indexterm" name="id3761"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlconnection-server-info" title="10.2.49 MySQLConnection.server_info Property">Section 10.2.49, “MySQLConnection.server_info Property”</a>
@@ -4230,7 +4175,7 @@ for result in cnx.cmd_query_iter(stateme
         This method returns the MySQL server information verbatim as a
         string, for example <code class="literal">'5.6.11-log'</code>, or
         <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-server-version"></a>10.2.24 MySQLConnection.get_server_version() Method</h3></div></div></div><a class="indexterm" name="id3786"></a><a class="indexterm" name="id3788"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-server-version"></a>10.2.24 MySQLConnection.get_server_version() Method</h3></div></div></div><a class="indexterm" name="id3772"></a><a class="indexterm" name="id3774"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlconnection-server-version" title="10.2.51 MySQLConnection.server_version Property">Section 10.2.51, “MySQLConnection.server_version Property”</a>
@@ -4238,7 +4183,7 @@ for result in cnx.cmd_query_iter(stateme
         </p></div><p>
         This method returns the MySQL server version as a tuple, or
         <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-is-connected"></a>10.2.25 MySQLConnection.is_connected() Method</h3></div></div></div><a class="indexterm" name="id3798"></a><a class="indexterm" name="id3800"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-is-connected"></a>10.2.25 MySQLConnection.is_connected() Method</h3></div></div></div><a class="indexterm" name="id3784"></a><a class="indexterm" name="id3786"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlconnection-connected" title="10.2.41 MySQLConnection.connected Property">Section 10.2.41, “MySQLConnection.connected Property”</a>
@@ -4253,13 +4198,13 @@ for result in cnx.cmd_query_iter(stateme
         <code class="literal">is_connected()</code> returns
         <code class="literal">True</code> when the connection is available,
         <code class="literal">False</code> otherwise.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-isset-client-flag"></a>10.2.26 MySQLConnection.isset_client_flag() Method</h3></div></div></div><a class="indexterm" name="id3815"></a><a class="indexterm" name="id3817"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-isset-client-flag"></a>10.2.26 MySQLConnection.isset_client_flag() Method</h3></div></div></div><a class="indexterm" name="id3801"></a><a class="indexterm" name="id3803"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.isset_client_flag(flag)
 </pre><p>
         This method returns <code class="literal">True</code> if the client flag
         was set, <code class="literal">False</code> otherwise.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-ping"></a>10.2.27 MySQLConnection.ping() Method</h3></div></div></div><a class="indexterm" name="id3826"></a><a class="indexterm" name="id3828"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-ping"></a>10.2.27 MySQLConnection.ping() Method</h3></div></div></div><a class="indexterm" name="id3812"></a><a class="indexterm" name="id3814"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.ping(reconnect=False, attempts=1, delay=0)
 </pre><p>
@@ -4280,7 +4225,7 @@ for result in cnx.cmd_query_iter(stateme
         method to check the connection without raising an error.
       </p><p>
         Raises <code class="literal">InterfaceError</code> on errors.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-reconnect"></a>10.2.28 MySQLConnection.reconnect() Method</h3></div></div></div><a class="indexterm" name="id3846"></a><a class="indexterm" name="id3848"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-reconnect"></a>10.2.28 MySQLConnection.reconnect() Method</h3></div></div></div><a class="indexterm" name="id3832"></a><a class="indexterm" name="id3834"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.reconnect(attempts=1, delay=0)
 </pre><p>
@@ -4294,7 +4239,7 @@ for result in cnx.cmd_query_iter(stateme
         delay when you expect the MySQL server to be down for
         maintenance, or when you expect the network to be temporarily
         unavailable.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-reset-session"></a>10.2.29 MySQLConnection.reset_session() Method</h3></div></div></div><a class="indexterm" name="id3859"></a><a class="indexterm" name="id3861"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-reset-session"></a>10.2.29 MySQLConnection.reset_session() Method</h3></div></div></div><a class="indexterm" name="id3845"></a><a class="indexterm" name="id3847"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.reset_session(user_variables = None, session_variables = None)
 </pre><p>
@@ -4316,7 +4261,7 @@ self.cnx.reset_session(user_variables, s
         method is a more lightweight alternative.
       </p><p>
         This method was added in Connector/Python 1.2.1.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-rollback"></a>10.2.30 MySQLConnection.rollback() Method</h3></div></div></div><a class="indexterm" name="id3876"></a><a class="indexterm" name="id3878"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-rollback"></a>10.2.30 MySQLConnection.rollback() Method</h3></div></div></div><a class="indexterm" name="id3862"></a><a class="indexterm" name="id3864"></a><p>
         This method sends a <code class="literal">ROLLBACK</code> statement to the
         MySQL server, undoing all data changes from the current
         transaction. By default, Connector/Python does not autocommit, so it is
@@ -4329,7 +4274,7 @@ self.cnx.reset_session(user_variables, s
         the
         <a class="link" href="#connector-python-api-mysqlconnection-commit" title="10.2.3 MySQLConnection.commit() Method">commit()</a>
         method.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-set-charset-collation"></a>10.2.31 MySQLConnection.set_charset_collation() Method</h3></div></div></div><a class="indexterm" name="id3889"></a><a class="indexterm" name="id3891"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-set-charset-collation"></a>10.2.31 MySQLConnection.set_charset_collation() Method</h3></div></div></div><a class="indexterm" name="id3875"></a><a class="indexterm" name="id3877"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.set_charset_collation(charset=None, collation=None)
 </pre><p>
@@ -4352,7 +4297,7 @@ self.cnx.reset_session(user_variables, s
         Specify a given collation as follows:
       </p><pre data-lang="python" class="programlisting">
 &gt;&gt;&gt; cnx = mysql.connector.connect(user='scott')
-&gt;&gt;&gt; cnx.set_charset_collation('latin1', 'latin1_general_ci')</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-set-client-flags"></a>10.2.32 MySQLConnection.set_client_flags() Method</h3></div></div></div><a class="indexterm" name="id3910"></a><a class="indexterm" name="id3912"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+&gt;&gt;&gt; cnx.set_charset_collation('latin1', 'latin1_general_ci')</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-set-client-flags"></a>10.2.32 MySQLConnection.set_client_flags() Method</h3></div></div></div><a class="indexterm" name="id3896"></a><a class="indexterm" name="id3898"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlconnection-client-flags" title="10.2.39 MySQLConnection.client_flags Property">Section 10.2.39, “MySQLConnection.client_flags Property”</a>
@@ -4379,7 +4324,7 @@ self.cnx.reset_session(user_variables, s
           Client flags are only set or used when connecting to the MySQL
           server. It is therefore necessary to reconnect after making
           changes.
-        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-shutdown"></a>10.2.33 MySQLConnection.shutdown() Method</h3></div></div></div><a class="indexterm" name="id3932"></a><a class="indexterm" name="id3934"></a><p>
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-shutdown"></a>10.2.33 MySQLConnection.shutdown() Method</h3></div></div></div><a class="indexterm" name="id3918"></a><a class="indexterm" name="id3920"></a><p>
         This method closes the socket. It raises no exceptions.
       </p><p>
         Unlike
@@ -4390,7 +4335,7 @@ self.cnx.reset_session(user_variables, s
         disrupted for some reason such as network failure.
       </p><p>
         <code class="literal">shutdown()</code> was added in Connector/Python 2.0.1.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-start-transaction"></a>10.2.34 MySQLConnection.start_transaction() Method</h3></div></div></div><a class="indexterm" name="id3946"></a><a class="indexterm" name="id3948"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-start-transaction"></a>10.2.34 MySQLConnection.start_transaction() Method</h3></div></div></div><a class="indexterm" name="id3932"></a><a class="indexterm" name="id3934"></a><p>
         This method starts a transaction. It accepts arguments
         indicating whether to use a consistent snapshot, which
         transaction isolation level to use, and the transaction access
@@ -4441,7 +4386,7 @@ self.cnx.reset_session(user_variables, s
         <code class="literal">start_transaction()</code> was added in MySQL Connector/Python
         1.1.0. The <code class="literal">readonly</code> argument was added in
         Connector/Python 1.1.5.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-autocommit"></a>10.2.35 MySQLConnection.autocommit Property</h3></div></div></div><a class="indexterm" name="id3991"></a><a class="indexterm" name="id3993"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-autocommit"></a>10.2.35 MySQLConnection.autocommit Property</h3></div></div></div><a class="indexterm" name="id3977"></a><a class="indexterm" name="id3979"></a><p>
         This property can be assigned a value of <code class="literal">True</code>
         or <code class="literal">False</code> to enable or disable the autocommit
         feature of MySQL. The property can be invoked to retrieve the
@@ -4462,7 +4407,7 @@ self.cnx.reset_session(user_variables, s
 False
 &gt;&gt;&gt; cnx.autocommit = True
 &gt;&gt;&gt; cnx.autocommit
-True</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-unread-results"></a>10.2.36 MySQLConnection.unread_results Property</h3></div></div></div><a class="indexterm" name="id4009"></a><a class="indexterm" name="id4011"></a><p>
+True</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-unread-results"></a>10.2.36 MySQLConnection.unread_results Property</h3></div></div></div><a class="indexterm" name="id3995"></a><a class="indexterm" name="id3997"></a><p>
         Indicates whether there is an unread result. It is set to
         <code class="literal">False</code> if there is not an unread result,
         otherwise <code class="literal">True</code>. This is used by cursors to
@@ -4472,7 +4417,7 @@ True</pre></div><div class="section"><di
         Do not set the value of this property, as only the connector
         should change the value. In other words, treat this as a
         read-only property.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-can-consume-results"></a>10.2.37 MySQLConnection.can_consume_results Property</h3></div></div></div><a class="indexterm" name="id4019"></a><a class="indexterm" name="id4021"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-can-consume-results"></a>10.2.37 MySQLConnection.can_consume_results Property</h3></div></div></div><a class="indexterm" name="id4005"></a><a class="indexterm" name="id4007"></a><p>
         This property indicates the value of the
         <code class="literal">consume_results</code> connection parameter that
         controls whether result sets produced by queries are
@@ -4480,10 +4425,10 @@ True</pre></div><div class="section"><di
         <a class="xref" href="#connector-python-connectargs" title="7.1 Connector/Python Connection Arguments">Section 7.1, “Connector/Python Connection Arguments”</a>.
       </p><p>
         This method was added in Connector/Python 2.1.1.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-charset"></a>10.2.38 MySQLConnection.charset Property</h3></div></div></div><a class="indexterm" name="id4029"></a><a class="indexterm" name="id4031"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-charset"></a>10.2.38 MySQLConnection.charset Property</h3></div></div></div><a class="indexterm" name="id4015"></a><a class="indexterm" name="id4017"></a><p>
         This property returns a string indicating which character set is
         used for the connection, whether or not it is connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-client-flags"></a>10.2.39 MySQLConnection.client_flags Property</h3></div></div></div><a class="indexterm" name="id4036"></a><a class="indexterm" name="id4038"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-client-flags"></a>10.2.39 MySQLConnection.client_flags Property</h3></div></div></div><a class="indexterm" name="id4022"></a><a class="indexterm" name="id4024"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">&gt;&gt;&gt; cnx.client_flags=flags
 &gt;&gt;&gt; cnx.clieng_flags
@@ -4506,10 +4451,10 @@ True</pre></div><div class="section"><di
           Client flags are only set or used when connecting to the MySQL
           server. It is therefore necessary to reconnect after making
           changes.
-        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-collation"></a>10.2.40 MySQLConnection.collation Property</h3></div></div></div><a class="indexterm" name="id4054"></a><a class="indexterm" name="id4056"></a><p>
+        </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-collation"></a>10.2.40 MySQLConnection.collation Property</h3></div></div></div><a class="indexterm" name="id4040"></a><a class="indexterm" name="id4042"></a><p>
         This property returns a string indicating which collation is
         used for the connection, whether or not it is connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connected"></a>10.2.41 MySQLConnection.connected Property</h3></div></div></div><a class="indexterm" name="id4061"></a><a class="indexterm" name="id4063"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connected"></a>10.2.41 MySQLConnection.connected Property</h3></div></div></div><a class="indexterm" name="id4047"></a><a class="indexterm" name="id4049"></a><p>
         Reports whether the connection to MySQL Server is available.
       </p><p>
         This read-only property checks whether the connection to MySQL
@@ -4519,11 +4464,11 @@ True</pre></div><div class="section"><di
         <code class="literal">connected</code> returns <code class="literal">True</code>
         when the connection is available, and <code class="literal">False</code>
         otherwise.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connection-id"></a>10.2.42 MySQLConnection.connection_id Property</h3></div></div></div><a class="indexterm" name="id4074"></a><a class="indexterm" name="id4076"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-connection-id"></a>10.2.42 MySQLConnection.connection_id Property</h3></div></div></div><a class="indexterm" name="id4060"></a><a class="indexterm" name="id4062"></a><p>
         This property returns the integer connection ID (thread ID or
         session ID) for the current connection or
         <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-converter-class"></a>10.2.43 MySQLConnection.converter-class Property</h3></div></div></div><a class="indexterm" name="id4082"></a><a class="indexterm" name="id4084"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-converter-class"></a>10.2.43 MySQLConnection.converter-class Property</h3></div></div></div><a class="indexterm" name="id4068"></a><a class="indexterm" name="id4070"></a><p>
         This property sets and returns the converter class to use when
         configuring the connection.
       </p><pre data-lang="python" class="programlisting"># get the current converter class being used
@@ -4535,7 +4480,7 @@ class TestConverter(MySQLConverterBase):
 # set the custom converter class
 cnx.converter_class = TestConverter
 print(cnx.converter_class)
-&gt;&gt; &lt;class '__main__.TestConverter'&gt;</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-database"></a>10.2.44 MySQLConnection.database Property</h3></div></div></div><a class="indexterm" name="id4090"></a><a class="indexterm" name="id4092"></a><p>
+&gt;&gt; &lt;class '__main__.TestConverter'&gt;</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-database"></a>10.2.44 MySQLConnection.database Property</h3></div></div></div><a class="indexterm" name="id4076"></a><a class="indexterm" name="id4078"></a><p>
         This property sets the current (default) database by executing a
         <code class="literal">USE</code> statement. The property can also be used
         to retrieve the current database name.
@@ -4546,7 +4491,7 @@ print(cnx.converter_class)
 u'mysql'
 </pre><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-warnings"></a>10.2.45 MySQLConnection.get_warnings Property</h3></div></div></div><a class="indexterm" name="id4100"></a><a class="indexterm" name="id4102"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-get-warnings"></a>10.2.45 MySQLConnection.get_warnings Property</h3></div></div></div><a class="indexterm" name="id4086"></a><a class="indexterm" name="id4088"></a><p>
         This property can be assigned a value of <code class="literal">True</code>
         or <code class="literal">False</code> to enable or disable whether
         warnings should be fetched automatically. The default is
@@ -4565,7 +4510,7 @@ u'mysql'
 [(u'Warning', 1292, u"Truncated incorrect DOUBLE value: 'a'")]
 </pre><p>
         Returns <code class="literal">True</code> or <code class="literal">False</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-in-transaction"></a>10.2.46 MySQLConnection.in_transaction Property</h3></div></div></div><a class="indexterm" name="id4116"></a><a class="indexterm" name="id4118"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-in-transaction"></a>10.2.46 MySQLConnection.in_transaction Property</h3></div></div></div><a class="indexterm" name="id4102"></a><a class="indexterm" name="id4104"></a><p>
         This property returns <code class="literal">True</code> or
         <code class="literal">False</code> to indicate whether a transaction is
         active for the connection. The value is <code class="literal">True</code>
@@ -4584,7 +4529,7 @@ True
 False
 </pre><p>
         <code class="literal">in_transaction</code> was added in MySQL Connector/Python 1.1.0.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-raise-on-warnings"></a>10.2.47 MySQLConnection.raise_on_warnings Property</h3></div></div></div><a class="indexterm" name="id4135"></a><a class="indexterm" name="id4137"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-raise-on-warnings"></a>10.2.47 MySQLConnection.raise_on_warnings Property</h3></div></div></div><a class="indexterm" name="id4121"></a><a class="indexterm" name="id4123"></a><p>
         This property can be assigned a value of <code class="literal">True</code>
         or <code class="literal">False</code> to enable or disable whether
         warnings should raise exceptions. The default is
@@ -4612,24 +4557,24 @@ False
 mysql.connector.errors.DataError: 1292: Truncated incorrect DOUBLE value: 'a'
 </pre><p>
         Returns <code class="literal">True</code> or <code class="literal">False</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-host"></a>10.2.48 MySQLConnection.server_host Property</h3></div></div></div><a class="indexterm" name="id4156"></a><a class="indexterm" name="id4158"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-host"></a>10.2.48 MySQLConnection.server_host Property</h3></div></div></div><a class="indexterm" name="id4142"></a><a class="indexterm" name="id4144"></a><p>
         This read-only property returns the host name or IP address used
         for connecting to the MySQL server.
       </p><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-info"></a>10.2.49 MySQLConnection.server_info Property</h3></div></div></div><a class="indexterm" name="id4164"></a><a class="indexterm" name="id4166"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-info"></a>10.2.49 MySQLConnection.server_info Property</h3></div></div></div><a class="indexterm" name="id4150"></a><a class="indexterm" name="id4152"></a><p>
         This read-only property returns the MySQL server information
         verbatim as a string: for example <code class="literal">8.4.0-log</code>,
         or <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-port"></a>10.2.50 MySQLConnection.server_port Property</h3></div></div></div><a class="indexterm" name="id4173"></a><a class="indexterm" name="id4175"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-port"></a>10.2.50 MySQLConnection.server_port Property</h3></div></div></div><a class="indexterm" name="id4159"></a><a class="indexterm" name="id4161"></a><p>
         This read-only property returns the TCP/IP port used for
         connecting to the MySQL server.
       </p><p>
         Returns an integer.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-version"></a>10.2.51 MySQLConnection.server_version Property</h3></div></div></div><a class="indexterm" name="id4181"></a><a class="indexterm" name="id4183"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-server-version"></a>10.2.51 MySQLConnection.server_version Property</h3></div></div></div><a class="indexterm" name="id4167"></a><a class="indexterm" name="id4169"></a><p>
         This read-only property returns the MySQL server version as a
         tuple, or <code class="literal">None</code> when not connected.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-sql-mode"></a>10.2.52 MySQLConnection.sql_mode Property</h3></div></div></div><a class="indexterm" name="id4189"></a><a class="indexterm" name="id4191"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-sql-mode"></a>10.2.52 MySQLConnection.sql_mode Property</h3></div></div></div><a class="indexterm" name="id4175"></a><a class="indexterm" name="id4177"></a><p>
         This property is used to retrieve and set the SQL Modes for the
         current connection. The value should be a list of different
         modes separated by comma (","), or a sequence of modes,
@@ -4649,7 +4594,7 @@ u'NO_AUTO_CREATE_USER', u'NO_ENGINE_SUBS
 u'REAL_AS_FLOAT,NO_ZERO_DATE'
 </pre><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-time-zone"></a>10.2.53 MySQLConnection.time_zone Property</h3></div></div></div><a class="indexterm" name="id4200"></a><a class="indexterm" name="id4202"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-time-zone"></a>10.2.53 MySQLConnection.time_zone Property</h3></div></div></div><a class="indexterm" name="id4186"></a><a class="indexterm" name="id4188"></a><p>
         This property is used to set or retrieve the time zone session
         variable for the current connection.
       </p><pre data-lang="python" class="programlisting">
@@ -4664,7 +4609,7 @@ u'REAL_AS_FLOAT,NO_ZERO_DATE'
 u'-09:00'
 </pre><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-use-unicode"></a>10.2.54 MySQLConnection.use_unicode Property</h3></div></div></div><a class="indexterm" name="id4209"></a><a class="indexterm" name="id4211"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-use-unicode"></a>10.2.54 MySQLConnection.use_unicode Property</h3></div></div></div><a class="indexterm" name="id4195"></a><a class="indexterm" name="id4197"></a><p>
         This property sets and returns whether the connection uses
         Unicode with the value <code class="literal">True</code> or
         <code class="literal">False</code>.
@@ -4677,20 +4622,20 @@ print(cnx.use_unicode)
 cnx.use_unicode = False
 print(cnx.use_unicode)
 &gt;&gt; False</pre><p>
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-unix-socket"></a>10.2.55 MySQLConnection.unix_socket Property</h3></div></div></div><a class="indexterm" name="id4219"></a><a class="indexterm" name="id4221"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-unix-socket"></a>10.2.55 MySQLConnection.unix_socket Property</h3></div></div></div><a class="indexterm" name="id4205"></a><a class="indexterm" name="id4207"></a><p>
         This read-only property returns the Unix socket file for
         connecting to the MySQL server.
       </p><p>
         Returns a string.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-user"></a>10.2.56 MySQLConnection.user Property</h3></div></div></div><a class="indexterm" name="id4227"></a><a class="indexterm" name="id4229"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnection-user"></a>10.2.56 MySQLConnection.user Property</h3></div></div></div><a class="indexterm" name="id4213"></a><a class="indexterm" name="id4215"></a><p>
         This read-only property returns the user name used for
         connecting to the MySQL server.
       </p><p>
         Returns a string.
-      </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlconnectionpool"></a>10.3 pooling.MySQLConnectionPool Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-constructor">10.3.1 pooling.MySQLConnectionPool Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-add-connection">10.3.2 MySQLConnectionPool.add_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-get-connection">10.3.3 MySQLConnectionPool.get_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-set-config">10.3.4 MySQLConnectionPool.set_config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-pool-name">10.3.5 MySQLConnectionPool.pool_name Property</a></span></dt></dl></div><a class="indexterm" name="id4235"></a><a class="indexterm" name="id4237"></a><p>
+      </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlconnectionpool"></a>10.3 pooling.MySQLConnectionPool Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-constructor">10.3.1 pooling.MySQLConnectionPool Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-add-connection">10.3.2 MySQLConnectionPool.add_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-get-connection">10.3.3 MySQLConnectionPool.get_connection() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-set-config">10.3.4 MySQLConnectionPool.set_config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlconnectionpool-pool-name">10.3.5 MySQLConnectionPool.pool_name Property</a></span></dt></dl></div><a class="indexterm" name="id4221"></a><a class="indexterm" name="id4223"></a><p>
       This class provides for the instantiation and management of
       connection pools.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-constructor"></a>10.3.1 pooling.MySQLConnectionPool Constructor</h3></div></div></div><a class="indexterm" name="id4242"></a><a class="indexterm" name="id4244"></a><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-constructor"></a>10.3.1 pooling.MySQLConnectionPool Constructor</h3></div></div></div><a class="indexterm" name="id4228"></a><a class="indexterm" name="id4230"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">MySQLConnectionPool(pool_name=None,
                     pool_size=5,
@@ -4736,7 +4681,7 @@ print(cnx.use_unicode)
 cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = "mypool",
                                                       pool_size = 3,
                                                       **dbconfig)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-add-connection"></a>10.3.2 MySQLConnectionPool.add_connection() Method</h3></div></div></div><a class="indexterm" name="id4275"></a><a class="indexterm" name="id4277"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-add-connection"></a>10.3.2 MySQLConnectionPool.add_connection() Method</h3></div></div></div><a class="indexterm" name="id4261"></a><a class="indexterm" name="id4263"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnxpool.add_connection(cnx = None)
 </pre><p>
@@ -4754,7 +4699,7 @@ cnxpool = mysql.connector.pooling.MySQLC
         Example:
       </p><pre data-lang="python" class="programlisting">cnxpool.add_connection()    # add new connection to pool
 cnxpool.add_connection(cnx) # add existing connection to pool
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-get-connection"></a>10.3.3 MySQLConnectionPool.get_connection() Method</h3></div></div></div><a class="indexterm" name="id4294"></a><a class="indexterm" name="id4296"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-get-connection"></a>10.3.3 MySQLConnectionPool.get_connection() Method</h3></div></div></div><a class="indexterm" name="id4280"></a><a class="indexterm" name="id4282"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnxpool.get_connection()
 </pre><p>
@@ -4763,7 +4708,7 @@ cnxpool.add_connection(cnx) # add existi
       </p><p>
         Example:
       </p><pre data-lang="python" class="programlisting">cnx = cnxpool.get_connection()
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-set-config"></a>10.3.4 MySQLConnectionPool.set_config() Method</h3></div></div></div><a class="indexterm" name="id4306"></a><a class="indexterm" name="id4308"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-set-config"></a>10.3.4 MySQLConnectionPool.set_config() Method</h3></div></div></div><a class="indexterm" name="id4292"></a><a class="indexterm" name="id4294"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnxpool.set_config(**kwargs)
 </pre><p>
@@ -4787,7 +4732,7 @@ cnxpool.add_connection(cnx) # add existi
 }
 
 cnxpool.set_config(**dbconfig)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-pool-name"></a>10.3.5 MySQLConnectionPool.pool_name Property</h3></div></div></div><a class="indexterm" name="id4323"></a><a class="indexterm" name="id4325"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlconnectionpool-pool-name"></a>10.3.5 MySQLConnectionPool.pool_name Property</h3></div></div></div><a class="indexterm" name="id4309"></a><a class="indexterm" name="id4311"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnxpool.pool_name
 </pre><p>
@@ -4795,7 +4740,7 @@ cnxpool.set_config(**dbconfig)
       </p><p>
         Example:
       </p><pre data-lang="python" class="programlisting">name = cnxpool.pool_name
-</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-pooledmysqlconnection"></a>10.4 pooling.PooledMySQLConnection Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-constructor">10.4.1 pooling.PooledMySQLConnection Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-close">10.4.2 PooledMySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-config">10.4.3 PooledMySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-pool-name">10.4.4 PooledMySQLConnection.pool_name Property</a></span></dt></dl></div><a class="indexterm" name="id4334"></a><a class="indexterm" name="id4336"></a><p>
+</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-pooledmysqlconnection"></a>10.4 pooling.PooledMySQLConnection Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-constructor">10.4.1 pooling.PooledMySQLConnection Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-close">10.4.2 PooledMySQLConnection.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-config">10.4.3 PooledMySQLConnection.config() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-pooledmysqlconnection-pool-name">10.4.4 PooledMySQLConnection.pool_name Property</a></span></dt></dl></div><a class="indexterm" name="id4320"></a><a class="indexterm" name="id4322"></a><p>
       This class is used by <code class="literal">MySQLConnectionPool</code> to
       return a pooled connection instance. It is also the class used for
       connections obtained with calls to the
@@ -4820,7 +4765,7 @@ cnxpool.set_config(**dbconfig)
         </p></li><li class="listitem"><p>
           A pooled connection has a <code class="literal">pool_name</code>
           property that returns the pool name.
-        </p></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-constructor"></a>10.4.1 pooling.PooledMySQLConnection Constructor</h3></div></div></div><a class="indexterm" name="id4359"></a><a class="indexterm" name="id4361"></a><p>
+        </p></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-constructor"></a>10.4.1 pooling.PooledMySQLConnection Constructor</h3></div></div></div><a class="indexterm" name="id4345"></a><a class="indexterm" name="id4347"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">PooledMySQLConnection(cnxpool, cnx)
 </pre><p>
@@ -4838,7 +4783,7 @@ cnxpool.set_config(**dbconfig)
           </p></li></ul></div><p>
         Example:
       </p><pre data-lang="python" class="programlisting">pcnx = mysql.connector.pooling.PooledMySQLConnection(cnxpool, cnx)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-close"></a>10.4.2 PooledMySQLConnection.close() Method</h3></div></div></div><a class="indexterm" name="id4381"></a><a class="indexterm" name="id4383"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-close"></a>10.4.2 PooledMySQLConnection.close() Method</h3></div></div></div><a class="indexterm" name="id4367"></a><a class="indexterm" name="id4369"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.close()
 </pre><p>
@@ -4852,11 +4797,11 @@ cnxpool.set_config(**dbconfig)
         connection is closed and reopened with the new configuration
         before being returned from the pool again in response to a
         connection request.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-config"></a>10.4.3 PooledMySQLConnection.config() Method</h3></div></div></div><a class="indexterm" name="id4393"></a><a class="indexterm" name="id4395"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-config"></a>10.4.3 PooledMySQLConnection.config() Method</h3></div></div></div><a class="indexterm" name="id4379"></a><a class="indexterm" name="id4381"></a><p>
         For pooled connections, the <code class="literal">config()</code> method
         raises a <code class="literal">PoolError</code> exception. Configuration
         for pooled connections should be done using the pool object.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-pool-name"></a>10.4.4 PooledMySQLConnection.pool_name Property</h3></div></div></div><a class="indexterm" name="id4402"></a><a class="indexterm" name="id4404"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-pooledmysqlconnection-pool-name"></a>10.4.4 PooledMySQLConnection.pool_name Property</h3></div></div></div><a class="indexterm" name="id4388"></a><a class="indexterm" name="id4390"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cnx.pool_name
 </pre><p>
@@ -4866,7 +4811,7 @@ cnxpool.set_config(**dbconfig)
         Example:
       </p><pre data-lang="python" class="programlisting">cnx = cnxpool.get_connection()
 name = cnx.pool_name
-</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlcursor"></a>10.5 cursor.MySQLCursor Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlcursor-constructor">10.5.1 cursor.MySQLCursor Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-add-attribute">10.5.2 MySQLCursor.add_attribute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-clear-attributes">10.5.3 MySQLCursor.clear_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-get-attributes">10.5.4 MySQLCursor.get_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-callproc">10.5.5 MySQLCursor.callproc() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-close">10.5.6 MySQLCursor.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-execute">10.5.7 MySQLCursor.execute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-executemany">10.5.8 MySQLCursor.executemany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchall">10.5.9 MySQLCursor.fetchall() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchmany">10.5.10 MySQLCursor.fetchmany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchone">10.5.11 MySQLCursor.fetchone() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-nextset">10.5.12 MySQLCursor.nextset() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchsets">10.5.13 MySQLCursor.fetchsets() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchwarnings">10.5.14 MySQLCursor.fetchwarnings() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-stored-results">10.5.15 MySQLCursor.stored_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-column-names">10.5.16 MySQLCursor.column_names Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-description">10.5.17 MySQLCursor.description Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-warnings">10.5.18 MySQLCursor.warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-lastrowid">10.5.19 MySQLCursor.lastrowid Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-rowcount">10.5.20 MySQLCursor.rowcount Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-statement">10.5.21 MySQLCursor.statement Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-with-rows">10.5.22 MySQLCursor.with_rows Property</a></span></dt></dl></div><a class="indexterm" name="id4413"></a><a class="indexterm" name="id4415"></a><p>
+</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-mysqlcursor"></a>10.5 cursor.MySQLCursor Class</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlcursor-constructor">10.5.1 cursor.MySQLCursor Constructor</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-add-attribute">10.5.2 MySQLCursor.add_attribute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-clear-attributes">10.5.3 MySQLCursor.clear_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-get-attributes">10.5.4 MySQLCursor.get_attributes() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-callproc">10.5.5 MySQLCursor.callproc() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-close">10.5.6 MySQLCursor.close() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-execute">10.5.7 MySQLCursor.execute() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-executemany">10.5.8 MySQLCursor.executemany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchall">10.5.9 MySQLCursor.fetchall() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchmany">10.5.10 MySQLCursor.fetchmany() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchone">10.5.11 MySQLCursor.fetchone() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-nextset">10.5.12 MySQLCursor.nextset() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchsets">10.5.13 MySQLCursor.fetchsets() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-fetchwarnings">10.5.14 MySQLCursor.fetchwarnings() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-stored-results">10.5.15 MySQLCursor.stored_results() Method</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-column-names">10.5.16 MySQLCursor.column_names Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-description">10.5.17 MySQLCursor.description Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-warnings">10.5.18 MySQLCursor.warnings Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-lastrowid">10.5.19 MySQLCursor.lastrowid Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-rowcount">10.5.20 MySQLCursor.rowcount Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-statement">10.5.21 MySQLCursor.statement Property</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursor-with-rows">10.5.22 MySQLCursor.with_rows Property</a></span></dt></dl></div><a class="indexterm" name="id4399"></a><a class="indexterm" name="id4401"></a><p>
       The <code class="literal">MySQLCursor</code> class instantiates objects that
       can execute operations such as SQL statements. Cursor objects
       interact with the MySQL server using a
@@ -4908,7 +4853,7 @@ cursor = cnx.cursor()
           executing prepared statements. See
           <a class="xref" href="#connector-python-api-mysqlcursorprepared" title="10.6.5 cursor.MySQLCursorPrepared Class">Section 10.6.5, “cursor.MySQLCursorPrepared Class”</a>.
         </p><pre data-lang="python" class="programlisting">cursor = cnx.cursor(prepared=True)
-</pre></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-constructor"></a>10.5.1 cursor.MySQLCursor Constructor</h3></div></div></div><a class="indexterm" name="id4455"></a><a class="indexterm" name="id4457"></a><p>
+</pre></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-constructor"></a>10.5.1 cursor.MySQLCursor Constructor</h3></div></div></div><a class="indexterm" name="id4441"></a><a class="indexterm" name="id4443"></a><p>
         In most cases, the <code class="literal">MySQLConnection</code>
         <a class="link" href="#connector-python-api-mysqlconnection-cursor" title="10.2.6 MySQLConnection.cursor() Method"><code class="literal">cursor()</code></a>
         method is used to instantiate a <code class="literal">MySQLCursor</code>
@@ -4931,7 +4876,7 @@ cursor = MySQLCursor(cnx)
         created but its
         <a class="link" href="#connector-python-api-mysqlcursor-execute" title="10.5.7 MySQLCursor.execute() Method"><code class="literal">execute()</code></a>
         method raises an exception.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-add-attribute"></a>10.5.2 MySQLCursor.add_attribute() Method</h3></div></div></div><a class="indexterm" name="id4475"></a><a class="indexterm" name="id4477"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-add-attribute"></a>10.5.2 MySQLCursor.add_attribute() Method</h3></div></div></div><a class="indexterm" name="id4461"></a><a class="indexterm" name="id4463"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.add_attribute(name, value)
 </pre><p>
@@ -4986,7 +4931,7 @@ cursor = MySQLCursor(cnx)
     # The query above did not send any attibute.
 </pre><p>
         This method was added in Connector/Python 8.0.26.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-clear-attributes"></a>10.5.3 MySQLCursor.clear_attributes() Method</h3></div></div></div><a class="indexterm" name="id4494"></a><a class="indexterm" name="id4496"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-clear-attributes"></a>10.5.3 MySQLCursor.clear_attributes() Method</h3></div></div></div><a class="indexterm" name="id4480"></a><a class="indexterm" name="id4482"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.clear_attributes()
 </pre><p>
@@ -4995,7 +4940,7 @@ cursor = MySQLCursor(cnx)
         <a class="xref" href="#connector-python-api-mysqlcursor-add-attribute" title="10.5.2 MySQLCursor.add_attribute() Method">Section 10.5.2, “MySQLCursor.add_attribute() Method”</a>.
       </p><p>
         This method was added in Connector/Python 8.0.26.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-get-attributes"></a>10.5.4 MySQLCursor.get_attributes() Method</h3></div></div></div><a class="indexterm" name="id4505"></a><a class="indexterm" name="id4507"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-get-attributes"></a>10.5.4 MySQLCursor.get_attributes() Method</h3></div></div></div><a class="indexterm" name="id4491"></a><a class="indexterm" name="id4493"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.get_attributes()
 </pre><p>
@@ -5003,7 +4948,7 @@ cursor = MySQLCursor(cnx)
         <a class="xref" href="#connector-python-api-mysqlcursor-add-attribute" title="10.5.2 MySQLCursor.add_attribute() Method">Section 10.5.2, “MySQLCursor.add_attribute() Method”</a>.
       </p><p>
         This method was added in Connector/Python 8.0.26.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-callproc"></a>10.5.5 MySQLCursor.callproc() Method</h3></div></div></div><a class="indexterm" name="id4516"></a><a class="indexterm" name="id4518"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-callproc"></a>10.5.5 MySQLCursor.callproc() Method</h3></div></div></div><a class="indexterm" name="id4502"></a><a class="indexterm" name="id4504"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">result_args = cursor.callproc(proc_name, args=())
 </pre><p>
@@ -5050,7 +4995,7 @@ END;
       </p><pre data-lang="python" class="programlisting">args = ('ham', 'eggs', (0, 'CHAR'))
 result_args = cursor.callproc('sp1', args)
 print(result_args[2])
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-close"></a>10.5.6 MySQLCursor.close() Method</h3></div></div></div><a class="indexterm" name="id4543"></a><a class="indexterm" name="id4545"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-close"></a>10.5.6 MySQLCursor.close() Method</h3></div></div></div><a class="indexterm" name="id4529"></a><a class="indexterm" name="id4531"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.close()
 </pre><p>
@@ -5058,7 +5003,7 @@ print(result_args[2])
         This method closes the cursor, resets all results, and ensures
         that the cursor object has no reference to its original
         connection object.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-execute"></a>10.5.7 MySQLCursor.execute() Method</h3></div></div></div><a class="indexterm" name="id4553"></a><a class="indexterm" name="id4555"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-execute"></a>10.5.7 MySQLCursor.execute() Method</h3></div></div></div><a class="indexterm" name="id4539"></a><a class="indexterm" name="id4541"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.execute(operation, params=None)
 iterator = cursor.execute(operation, params=None)
@@ -5107,7 +5052,7 @@ cursor.execute(select_stmt, { 'emp_no':
         generated by the operation are available through the
         <a class="link" href="#connector-python-api-mysqlcursor-fetchwarnings" title="10.5.14 MySQLCursor.fetchwarnings() Method">MySQLCursor.fetchwarnings()</a>
         method.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-executemany"></a>10.5.8 MySQLCursor.executemany() Method</h3></div></div></div><a class="indexterm" name="id4586"></a><a class="indexterm" name="id4588"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-executemany"></a>10.5.8 MySQLCursor.executemany() Method</h3></div></div></div><a class="indexterm" name="id4572"></a><a class="indexterm" name="id4574"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">cursor.executemany(operation, seq_of_params)
 </pre><p>
@@ -5148,7 +5093,7 @@ VALUES ('Jane', '2005-02-12'), ('Joe', '
         <code class="literal">operation</code> argument. Doing so raises an
         <code class="literal">InternalError</code> exception. Consider using
         <a class="xref" href="#connector-python-multi" title="9.3 Executing Multiple Statements">Section 9.3, “Executing Multiple Statements”</a> instead.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchall"></a>10.5.9 MySQLCursor.fetchall() Method</h3></div></div></div><a class="indexterm" name="id4615"></a><a class="indexterm" name="id4617"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchall"></a>10.5.9 MySQLCursor.fetchall() Method</h3></div></div></div><a class="indexterm" name="id4601"></a><a class="indexterm" name="id4603"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">rows = cursor.fetchall()
 </pre><p>
@@ -5164,7 +5109,7 @@ VALUES ('Jane', '2005-02-12'), ('Joe', '
 </pre><p>
         You must fetch all rows for the current query before executing
         new statements using the same connection.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchmany"></a>10.5.10 MySQLCursor.fetchmany() Method</h3></div></div></div><a class="indexterm" name="id4627"></a><a class="indexterm" name="id4629"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchmany"></a>10.5.10 MySQLCursor.fetchmany() Method</h3></div></div></div><a class="indexterm" name="id4613"></a><a class="indexterm" name="id4615"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">rows = cursor.fetchmany(size=1)
 </pre><p>
@@ -5178,7 +5123,7 @@ VALUES ('Jane', '2005-02-12'), ('Joe', '
       </p><p>
         You must fetch all rows for the current query before executing
         new statements using the same connection.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchone"></a>10.5.11 MySQLCursor.fetchone() Method</h3></div></div></div><a class="indexterm" name="id4639"></a><a class="indexterm" name="id4641"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchone"></a>10.5.11 MySQLCursor.fetchone() Method</h3></div></div></div><a class="indexterm" name="id4625"></a><a class="indexterm" name="id4627"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">row = cursor.fetchone()
 </pre><p>
@@ -5213,7 +5158,7 @@ for row in cursor:
 </pre><p>
         You must fetch all rows for the current query before executing
         new statements using the same connection.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-nextset"></a>10.5.12 MySQLCursor.nextset() Method</h3></div></div></div><a class="indexterm" name="id4659"></a><a class="indexterm" name="id4661"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-nextset"></a>10.5.12 MySQLCursor.nextset() Method</h3></div></div></div><a class="indexterm" name="id4645"></a><a class="indexterm" name="id4647"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">row = cursor.nextset()
 </pre><p>
@@ -5242,7 +5187,7 @@ with cnx.cursor() as cur:
         # do something with result set
 </pre><p>
         This method was added in Connector/Python 9.2.0.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchsets"></a>10.5.13 MySQLCursor.fetchsets() Method</h3></div></div></div><a class="indexterm" name="id4673"></a><a class="indexterm" name="id4675"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchsets"></a>10.5.13 MySQLCursor.fetchsets() Method</h3></div></div></div><a class="indexterm" name="id4659"></a><a class="indexterm" name="id4661"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">for statement, result_set in cursor.fetchsets():
     # do something with statement and/or result set
@@ -5265,7 +5210,7 @@ with cnx.cursor() as cur:
             # do something with statement and/or result set
 </pre><p>
         This method was added in Connector/Python 9.2.0.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchwarnings"></a>10.5.14 MySQLCursor.fetchwarnings() Method</h3></div></div></div><a class="indexterm" name="id4685"></a><a class="indexterm" name="id4687"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-fetchwarnings"></a>10.5.14 MySQLCursor.fetchwarnings() Method</h3></div></div></div><a class="indexterm" name="id4671"></a><a class="indexterm" name="id4673"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0. Use the property
           method
           <a class="xref" href="#connector-python-api-mysqlcursor-warnings" title="10.5.18 MySQLCursor.warnings Property">Section 10.5.18, “MySQLCursor.warnings Property”</a>
@@ -5294,7 +5239,7 @@ with cnx.cursor() as cur:
         instead, using the connection's
         <a class="link" href="#connector-python-api-mysqlconnection-raise-on-warnings" title="10.2.47 MySQLConnection.raise_on_warnings Property"><code class="literal">raise_on_warnings</code></a>
         property.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-stored-results"></a>10.5.15 MySQLCursor.stored_results() Method</h3></div></div></div><a class="indexterm" name="id4707"></a><a class="indexterm" name="id4709"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-stored-results"></a>10.5.15 MySQLCursor.stored_results() Method</h3></div></div></div><a class="indexterm" name="id4693"></a><a class="indexterm" name="id4695"></a><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Deprecation</div><p>
           This method has been deprecated as of 9.3.0.
         </p></div><p>
         Syntax:
@@ -5318,7 +5263,7 @@ with cnx.cursor() as cur:
 ...
 [(1,)]
 [(2,)]
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-column-names"></a>10.5.16 MySQLCursor.column_names Property</h3></div></div></div><a class="indexterm" name="id4723"></a><a class="indexterm" name="id4725"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-column-names"></a>10.5.16 MySQLCursor.column_names Property</h3></div></div></div><a class="indexterm" name="id4709"></a><a class="indexterm" name="id4711"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">sequence = cursor.column_names
 </pre><p>
@@ -5336,7 +5281,7 @@ print("{last_name}, {first_name}: {hire_
         Alternatively, as of Connector/Python 2.0.0, you can fetch rows as
         dictionaries directly; see
         <a class="xref" href="#connector-python-api-mysqlcursordict" title="10.6.3 cursor.MySQLCursorDict Class">Section 10.6.3, “cursor.MySQLCursorDict Class”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-description"></a>10.5.17 MySQLCursor.description Property</h3></div></div></div><a class="indexterm" name="id4737"></a><a class="indexterm" name="id4739"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-description"></a>10.5.17 MySQLCursor.description Property</h3></div></div></div><a class="indexterm" name="id4723"></a><a class="indexterm" name="id4725"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">tuples = cursor.description
 </pre><p>
@@ -5391,7 +5336,7 @@ Column 3:
         interpret it, do this:
       </p><pre data-lang="python" class="programlisting">&gt;&gt;&gt; from mysql.connector import FieldFlag
 &gt;&gt;&gt; FieldFlag.desc
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-warnings"></a>10.5.18 MySQLCursor.warnings Property</h3></div></div></div><a class="indexterm" name="id4756"></a><a class="indexterm" name="id4758"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-warnings"></a>10.5.18 MySQLCursor.warnings Property</h3></div></div></div><a class="indexterm" name="id4742"></a><a class="indexterm" name="id4744"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">tuples = cursor.warnings
 </pre><p>
@@ -5415,7 +5360,7 @@ Column 3:
         instead, using the connection's
         <a class="link" href="#connector-python-api-mysqlconnection-raise-on-warnings" title="10.2.47 MySQLConnection.raise_on_warnings Property"><code class="literal">raise_on_warnings</code></a>
         property.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-lastrowid"></a>10.5.19 MySQLCursor.lastrowid Property</h3></div></div></div><a class="indexterm" name="id4774"></a><a class="indexterm" name="id4776"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-lastrowid"></a>10.5.19 MySQLCursor.lastrowid Property</h3></div></div></div><a class="indexterm" name="id4760"></a><a class="indexterm" name="id4762"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">id = cursor.lastrowid
 </pre><p>
@@ -5435,7 +5380,7 @@ Column 3:
         The <code class="literal">lastrowid</code> property is like the
         <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-insert-id.html" target="_top"><code class="literal">mysql_insert_id()</code></a> C API
         function; see <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-insert-id.html" target="_top">mysql_insert_id()</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-rowcount"></a>10.5.20 MySQLCursor.rowcount Property</h3></div></div></div><a class="indexterm" name="id4800"></a><a class="indexterm" name="id4802"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-rowcount"></a>10.5.20 MySQLCursor.rowcount Property</h3></div></div></div><a class="indexterm" name="id4786"></a><a class="indexterm" name="id4788"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">count = cursor.rowcount
 </pre><p>
@@ -5454,7 +5399,7 @@ Column 3:
         The <code class="literal">rowcount</code> property is like the
         <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-affected-rows.html" target="_top"><code class="literal">mysql_affected_rows()</code></a> C API
         function; see <a class="ulink" href="https://dev.mysql.com/doc/c-api/8.0/en/mysql-affected-rows.html" target="_top">mysql_affected_rows()</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-statement"></a>10.5.21 MySQLCursor.statement Property</h3></div></div></div><a class="indexterm" name="id4822"></a><a class="indexterm" name="id4824"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-statement"></a>10.5.21 MySQLCursor.statement Property</h3></div></div></div><a class="indexterm" name="id4808"></a><a class="indexterm" name="id4810"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">str = cursor.statement
 </pre><p>
@@ -5471,7 +5416,7 @@ Column 3:
         from the individual statements. The <code class="literal">statement</code>
         property for this iterator shows statement strings for the
         individual statements.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-with-rows"></a>10.5.22 MySQLCursor.with_rows Property</h3></div></div></div><a class="indexterm" name="id4838"></a><a class="indexterm" name="id4840"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursor-with-rows"></a>10.5.22 MySQLCursor.with_rows Property</h3></div></div></div><a class="indexterm" name="id4824"></a><a class="indexterm" name="id4826"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">boolean = cursor.with_rows
 </pre><p>
@@ -5495,11 +5440,11 @@ for result in cursor.execute(operation):
     result.fetchall()
   else:
     print("Number of affected rows: {}".format(result.rowcount))
-</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cursor-subclasses"></a>10.6 Subclasses cursor.MySQLCursor</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffered">10.6.1 cursor.MySQLCursorBuffered Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorraw">10.6.2 cursor.MySQLCursorRaw Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursordict">10.6.3 cursor.MySQLCursorDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffereddict">10.6.4 cursor.MySQLCursorBufferedDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorprepared">10.6.5 cursor.MySQLCursorPrepared Class</a></span></dt></dl></div><a class="indexterm" name="id4856"></a><a class="indexterm" name="id4858"></a><p>
+</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cursor-subclasses"></a>10.6 Subclasses cursor.MySQLCursor</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffered">10.6.1 cursor.MySQLCursorBuffered Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorraw">10.6.2 cursor.MySQLCursorRaw Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursordict">10.6.3 cursor.MySQLCursorDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorbuffereddict">10.6.4 cursor.MySQLCursorBufferedDict Class</a></span></dt><dt><span class="section"><a href="#connector-python-api-mysqlcursorprepared">10.6.5 cursor.MySQLCursorPrepared Class</a></span></dt></dl></div><a class="indexterm" name="id4842"></a><a class="indexterm" name="id4844"></a><p>
       The cursor classes described in the following sections inherit
       from the <code class="literal">MySQLCursor</code> class, which is described
       in <a class="xref" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class">Section 10.5, “cursor.MySQLCursor Class”</a>.
-    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorbuffered"></a>10.6.1 cursor.MySQLCursorBuffered Class</h3></div></div></div><a class="indexterm" name="id4865"></a><a class="indexterm" name="id4867"></a><p>
+    </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorbuffered"></a>10.6.1 cursor.MySQLCursorBuffered Class</h3></div></div></div><a class="indexterm" name="id4851"></a><a class="indexterm" name="id4853"></a><p>
         The <code class="literal">MySQLCursorBuffered</code> class inherits from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
       </p><p>
@@ -5544,7 +5489,7 @@ cnx2 = mysql.connector.connect(buffered=
 </pre><p>
         For a practical use case, see
         <a class="xref" href="#connector-python-tutorial-cursorbuffered" title="6.1 Tutorial: Raise Employee's Salary Using a Buffered Cursor">Section 6.1, “Tutorial: Raise Employee's Salary Using a Buffered Cursor”</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorraw"></a>10.6.2 cursor.MySQLCursorRaw Class</h3></div></div></div><a class="indexterm" name="id4893"></a><a class="indexterm" name="id4895"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorraw"></a>10.6.2 cursor.MySQLCursorRaw Class</h3></div></div></div><a class="indexterm" name="id4879"></a><a class="indexterm" name="id4881"></a><p>
         The <code class="literal">MySQLCursorRaw</code> class inherits from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
       </p><p>
@@ -5571,7 +5516,7 @@ cursor = cnx.cursor(raw=True)
 
 # All cursors created from cnx2 will be raw by default
 cnx2 = mysql.connector.connect(raw=True)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursordict"></a>10.6.3 cursor.MySQLCursorDict Class</h3></div></div></div><a class="indexterm" name="id4913"></a><a class="indexterm" name="id4915"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursordict"></a>10.6.3 cursor.MySQLCursorDict Class</h3></div></div></div><a class="indexterm" name="id4899"></a><a class="indexterm" name="id4901"></a><p>
         The <code class="literal">MySQLCursorDict</code> class inherits from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
         This class is available as of Connector/Python 2.0.0.
@@ -5605,7 +5550,7 @@ for row in cursor:
 print("Countries in Europe with population:")
 for row in cursor:
     print("* {Name}: {Population}".format(**row))
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorbuffereddict"></a>10.6.4 cursor.MySQLCursorBufferedDict Class</h3></div></div></div><a class="indexterm" name="id4932"></a><a class="indexterm" name="id4934"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorbuffereddict"></a>10.6.4 cursor.MySQLCursorBufferedDict Class</h3></div></div></div><a class="indexterm" name="id4918"></a><a class="indexterm" name="id4920"></a><p>
         The <code class="literal">MySQLCursorBufferedDict</code> class inherits
         from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
@@ -5622,7 +5567,7 @@ for row in cursor:
         <code class="literal">buffered</code> argument when instantiating a new
         dictionary cursor:
       </p><pre data-lang="python" class="programlisting">cursor = cnx.cursor(dictionary=True, buffered=True)
-</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorprepared"></a>10.6.5 cursor.MySQLCursorPrepared Class</h3></div></div></div><a class="indexterm" name="id4950"></a><a class="indexterm" name="id4952"></a><a class="indexterm" name="id4955"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-mysqlcursorprepared"></a>10.6.5 cursor.MySQLCursorPrepared Class</h3></div></div></div><a class="indexterm" name="id4936"></a><a class="indexterm" name="id4938"></a><a class="indexterm" name="id4941"></a><p>
         The <code class="literal">MySQLCursorPrepared</code> class inherits from
         <a class="link" href="#connector-python-api-mysqlcursor" title="10.5 cursor.MySQLCursor Class"><code class="literal">MySQLCursor</code></a>.
       </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><div class="admon-title">Note</div><p>
@@ -5715,7 +5660,7 @@ cursor.execute(stmt, (10,))
         To use multiple prepared statements simultaneously, instantiate
         multiple cursors from the <code class="literal">MySQLCursorPrepared</code>
         class.
-      </p><a class="indexterm" name="id5026"></a><p>
+      </p><a class="indexterm" name="id5012"></a><p>
         The MySQL client/server protocol has an option to send prepared
         statement parameters via the
         <code class="literal">COM_STMT_SEND_LONG_DATA</code> command. To use this
@@ -5727,7 +5672,7 @@ cursor.execute(stmt, (10,))
 
 cur = cnx.cursor(prepared=True)
 cur.execute("SELECT (%s)", (io.BytesIO(bytes("A", "latin1")), ))
-</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-clientflag"></a>10.7 constants.ClientFlag Class</h2></div></div></div><a class="indexterm" name="id5034"></a><a class="indexterm" name="id5036"></a><p>
+</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-clientflag"></a>10.7 constants.ClientFlag Class</h2></div></div></div><a class="indexterm" name="id5020"></a><a class="indexterm" name="id5022"></a><p>
       This class provides constants defining MySQL client flags that can
       be used when the connection is established to configure the
       session. The <code class="literal">ClientFlag</code> class is available when
@@ -5742,7 +5687,7 @@ cur.execute("SELECT (%s)", (io.BytesIO(b
       argument</a> <code class="literal">client_flag</code>.
     </p><p>
       The <code class="literal">ClientFlag</code> class cannot be instantiated.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-fieldtype"></a>10.8 constants.FieldType Class</h2></div></div></div><a class="indexterm" name="id5050"></a><a class="indexterm" name="id5052"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-fieldtype"></a>10.8 constants.FieldType Class</h2></div></div></div><a class="indexterm" name="id5036"></a><a class="indexterm" name="id5038"></a><p>
       This class provides all supported MySQL field or data types. They
       can be useful when dealing with raw data or defining your own
       converters. The field type is stored with every cursor in the
@@ -5772,7 +5717,7 @@ cursor.close()
 cnx.close()
 </pre><p>
       The <code class="literal">FieldType</code> class cannot be instantiated.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-sqlmode"></a>10.9 constants.SQLMode Class</h2></div></div></div><a class="indexterm" name="id5061"></a><a class="indexterm" name="id5063"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-sqlmode"></a>10.9 constants.SQLMode Class</h2></div></div></div><a class="indexterm" name="id5047"></a><a class="indexterm" name="id5049"></a><p>
       This class provides all known MySQL
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html" target="_top">Server SQL Modes</a>. It is mostly
       used when setting the SQL modes at connection time using the
@@ -5780,13 +5725,13 @@ cnx.close()
       <a class="xref" href="#connector-python-api-mysqlconnection-sql-mode" title="10.2.52 MySQLConnection.sql_mode Property">Section 10.2.52, “MySQLConnection.sql_mode Property”</a>.
     </p><p>
       The <code class="literal">SQLMode</code> class cannot be instantiated.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-characterset"></a>10.10 constants.CharacterSet Class</h2></div></div></div><a class="indexterm" name="id5073"></a><a class="indexterm" name="id5075"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-characterset"></a>10.10 constants.CharacterSet Class</h2></div></div></div><a class="indexterm" name="id5059"></a><a class="indexterm" name="id5061"></a><p>
       This class provides all known MySQL characters sets and their
       default collations. For examples, see
       <a class="xref" href="#connector-python-api-mysqlconnection-set-charset-collation" title="10.2.31 MySQLConnection.set_charset_collation() Method">Section 10.2.31, “MySQLConnection.set_charset_collation() Method”</a>.
     </p><p>
       The <code class="literal">CharacterSet</code> class cannot be instantiated.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-refreshoption"></a>10.11 constants.RefreshOption Class</h2></div></div></div><a class="indexterm" name="id5083"></a><a class="indexterm" name="id5085"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-refreshoption"></a>10.11 constants.RefreshOption Class</h2></div></div></div><a class="indexterm" name="id5069"></a><a class="indexterm" name="id5071"></a><p>
       This class performs various flush operations.
     </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
           <code class="literal">RefreshOption.GRANT</code>
@@ -5942,7 +5887,7 @@ cnx.close()
         </tr><tr>
           <td><code class="literal">HY</code></td>
           <td><code class="literal">DatabaseError</code></td>
-        </tr></tbody></table></div></div><br class="table-break"><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errorcode"></a>10.12.1 errorcode Module</h3></div></div></div><a class="indexterm" name="id5309"></a><a class="indexterm" name="id5311"></a><p>
+        </tr></tbody></table></div></div><br class="table-break"><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errorcode"></a>10.12.1 errorcode Module</h3></div></div></div><a class="indexterm" name="id5295"></a><a class="indexterm" name="id5297"></a><p>
         This module contains both MySQL server and client error codes
         defined as module attributes with the error number as value.
         Using error codes instead of error numbers could make reading
@@ -5953,7 +5898,7 @@ cnx.close()
 1051</pre><p>
         For more information about MySQL errors, see
         <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/error-handling.html" target="_top">Error Messages and Common Problems</a>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-error"></a>10.12.2 errors.Error Exception</h3></div></div></div><a class="indexterm" name="id5319"></a><a class="indexterm" name="id5321"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-error"></a>10.12.2 errors.Error Exception</h3></div></div></div><a class="indexterm" name="id5305"></a><a class="indexterm" name="id5307"></a><p>
         This exception is the base class for all other exceptions in the
         <code class="literal">errors</code> module. It can be used to catch all
         errors in a single <code class="literal">except</code> statement.
@@ -6044,7 +5989,7 @@ except mysql.connector.Error as e:
 </pre><p>
         <code class="literal">errors.Error</code> is a subclass of the Python
         <code class="literal">StandardError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-dataerror"></a>10.12.3 errors.DataError Exception</h3></div></div></div><a class="indexterm" name="id5359"></a><a class="indexterm" name="id5361"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-dataerror"></a>10.12.3 errors.DataError Exception</h3></div></div></div><a class="indexterm" name="id5345"></a><a class="indexterm" name="id5347"></a><p>
         This exception is raised when there were problems with the data.
         Examples are a column set to <code class="literal">NULL</code> that cannot
         be <code class="literal">NULL</code>, out-of-range values for a column,
@@ -6053,13 +5998,13 @@ except mysql.connector.Error as e:
       </p><p>
         <code class="literal">errors.DataError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-databaseerror"></a>10.12.4 errors.DatabaseError Exception</h3></div></div></div><a class="indexterm" name="id5371"></a><a class="indexterm" name="id5373"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-databaseerror"></a>10.12.4 errors.DatabaseError Exception</h3></div></div></div><a class="indexterm" name="id5357"></a><a class="indexterm" name="id5359"></a><p>
         This exception is the default for any MySQL error which does not
         fit the other exceptions.
       </p><p>
         <code class="literal">errors.DatabaseError</code> is a subclass of
         <code class="literal">errors.Error</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-integrityerror"></a>10.12.5 errors.IntegrityError Exception</h3></div></div></div><a class="indexterm" name="id5381"></a><a class="indexterm" name="id5383"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-integrityerror"></a>10.12.5 errors.IntegrityError Exception</h3></div></div></div><a class="indexterm" name="id5367"></a><a class="indexterm" name="id5369"></a><p>
         This exception is raised when the relational integrity of the
         data is affected. For example, a duplicate key was inserted or a
         foreign key constraint would fail.
@@ -6075,19 +6020,19 @@ except mysql.connector.IntegrityError as
 </pre><p>
         <code class="literal">errors.IntegrityError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-interfaceerror"></a>10.12.6 errors.InterfaceError Exception</h3></div></div></div><a class="indexterm" name="id5393"></a><a class="indexterm" name="id5395"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-interfaceerror"></a>10.12.6 errors.InterfaceError Exception</h3></div></div></div><a class="indexterm" name="id5379"></a><a class="indexterm" name="id5381"></a><p>
         This exception is raised for errors originating from Connector/Python
         itself, not related to the MySQL server.
       </p><p>
         <code class="literal">errors.InterfaceError</code> is a subclass of
         <code class="literal">errors.Error</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-internalerror"></a>10.12.7 errors.InternalError Exception</h3></div></div></div><a class="indexterm" name="id5403"></a><a class="indexterm" name="id5405"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-internalerror"></a>10.12.7 errors.InternalError Exception</h3></div></div></div><a class="indexterm" name="id5389"></a><a class="indexterm" name="id5391"></a><p>
         This exception is raised when the MySQL server encounters an
         internal error, for example, when a deadlock occurred.
       </p><p>
         <code class="literal">errors.InternalError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-notsupportederror"></a>10.12.8 errors.NotSupportedError Exception</h3></div></div></div><a class="indexterm" name="id5413"></a><a class="indexterm" name="id5415"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-notsupportederror"></a>10.12.8 errors.NotSupportedError Exception</h3></div></div></div><a class="indexterm" name="id5399"></a><a class="indexterm" name="id5401"></a><p>
         This exception is raised when some feature was used that is not
         supported by the version of MySQL that returned the error. It is
         also raised when using functions or statements that are not
@@ -6095,7 +6040,7 @@ except mysql.connector.IntegrityError as
       </p><p>
         <code class="literal">errors.NotSupportedError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-operationalerror"></a>10.12.9 errors.OperationalError Exception</h3></div></div></div><a class="indexterm" name="id5423"></a><a class="indexterm" name="id5425"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-operationalerror"></a>10.12.9 errors.OperationalError Exception</h3></div></div></div><a class="indexterm" name="id5409"></a><a class="indexterm" name="id5411"></a><p>
         This exception is raised for errors which are related to MySQL's
         operations. For example: too many connections; a host name could
         not be resolved; bad handshake; server is shutting down,
@@ -6103,11 +6048,11 @@ except mysql.connector.IntegrityError as
       </p><p>
         <code class="literal">errors.OperationalError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-poolerror"></a>10.12.10 errors.PoolError Exception</h3></div></div></div><a class="indexterm" name="id5433"></a><a class="indexterm" name="id5435"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-poolerror"></a>10.12.10 errors.PoolError Exception</h3></div></div></div><a class="indexterm" name="id5419"></a><a class="indexterm" name="id5421"></a><p>
         This exception is raised for connection pool errors.
         <code class="literal">errors.PoolError</code> is a subclass of
         <code class="literal">errors.Error</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-programmingerror"></a>10.12.11 errors.ProgrammingError Exception</h3></div></div></div><a class="indexterm" name="id5442"></a><a class="indexterm" name="id5444"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-programmingerror"></a>10.12.11 errors.ProgrammingError Exception</h3></div></div></div><a class="indexterm" name="id5428"></a><a class="indexterm" name="id5430"></a><p>
         This exception is raised on programming errors, for example when
         you have a syntax error in your SQL or a table was not found.
       </p><p>
@@ -6122,7 +6067,7 @@ except mysql.connector.ProgrammingError
 </pre><p>
         <code class="literal">errors.ProgrammingError</code> is a subclass of
         <code class="literal">errors.DatabaseError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-warning"></a>10.12.12 errors.Warning Exception</h3></div></div></div><a class="indexterm" name="id5454"></a><a class="indexterm" name="id5456"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-warning"></a>10.12.12 errors.Warning Exception</h3></div></div></div><a class="indexterm" name="id5440"></a><a class="indexterm" name="id5442"></a><p>
         This exception is used for reporting important warnings,
         however, Connector/Python does not use it. It is included to be compliant
         with the Python Database Specification v2.0 (PEP-249).
@@ -6135,7 +6080,7 @@ except mysql.connector.ProgrammingError
       </p><p>
         <code class="literal">errors.Warning</code> is a subclass of the Python
         <code class="literal">StandardError</code>.
-      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-custom-error-exception"></a>10.12.13 errors.custom_error_exception() Function</h3></div></div></div><a class="indexterm" name="id5467"></a><a class="indexterm" name="id5469"></a><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="connector-python-api-errors-custom-error-exception"></a>10.12.13 errors.custom_error_exception() Function</h3></div></div></div><a class="indexterm" name="id5453"></a><a class="indexterm" name="id5455"></a><p>
         Syntax:
       </p><pre data-lang="python" class="programlisting">errors.custom_error_exception(error=None, exception=None)
 </pre><p>
@@ -6188,9 +6133,9 @@ mysql.connector.custom_error_exception({
       an optional module that must be installed using a binary
       distribution of Connector/Python that includes it, or compiled using a source
       distribution. See <a class="xref" href="#connector-python-installation" title="Chapter 4 Connector/Python Installation">Chapter 4, <i>Connector/Python Installation</i></a>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-mysql-connector"></a>11.1 _mysql_connector Module</h2></div></div></div><a class="indexterm" name="id5503"></a><a class="indexterm" name="id5505"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-mysql-connector"></a>11.1 _mysql_connector Module</h2></div></div></div><a class="indexterm" name="id5489"></a><a class="indexterm" name="id5491"></a><p>
       The <code class="literal">_mysql_connector</code> module provides classes.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-mysql"></a>11.2 _mysql_connector.MySQL() Class</h2></div></div></div><a class="indexterm" name="id5511"></a><a class="indexterm" name="id5513"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-mysql"></a>11.2 _mysql_connector.MySQL() Class</h2></div></div></div><a class="indexterm" name="id5497"></a><a class="indexterm" name="id5499"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx = _mysql_connector.MySQL(<em class="replaceable"><code>args</code></em>)
 </pre><p>
@@ -6220,7 +6165,7 @@ ccnx.close()
       <a class="xref" href="#connector-python-connectargs" title="7.1 Connector/Python Connection Arguments">Section 7.1, “Connector/Python Connection Arguments”</a>, except that
       <code class="literal">charset_name</code> corresponds to
       <code class="literal">charset</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-affected-rows"></a>11.3 _mysql_connector.MySQL.affected_rows() Method</h2></div></div></div><a class="indexterm" name="id5540"></a><a class="indexterm" name="id5542"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-affected-rows"></a>11.3 _mysql_connector.MySQL.affected_rows() Method</h2></div></div></div><a class="indexterm" name="id5526"></a><a class="indexterm" name="id5528"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.affected_rows()
 </pre><p>
@@ -6228,7 +6173,7 @@ ccnx.close()
       most recent <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/update.html" target="_top"><code class="literal">UPDATE</code></a>,
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/insert.html" target="_top"><code class="literal">INSERT</code></a>, or
       <a class="ulink" href="https://dev.mysql.com/doc/refman/8.0/en/delete.html" target="_top"><code class="literal">DELETE</code></a> statement.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-autocommit"></a>11.4 _mysql_connector.MySQL.autocommit() Method</h2></div></div></div><a class="indexterm" name="id5555"></a><a class="indexterm" name="id5557"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-autocommit"></a>11.4 _mysql_connector.MySQL.autocommit() Method</h2></div></div></div><a class="indexterm" name="id5541"></a><a class="indexterm" name="id5543"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.autocommit(<em class="replaceable"><code>bool</code></em>)
 </pre><p>
@@ -6237,7 +6182,7 @@ ccnx.close()
       Raises a <code class="literal">ValueError</code> exception if
       <code class="literal">mode</code> is not <code class="literal">True</code> or
       <code class="literal">False</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-buffered"></a>11.5 _mysql_connector.MySQL.buffered() Method</h2></div></div></div><a class="indexterm" name="id5570"></a><a class="indexterm" name="id5572"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-buffered"></a>11.5 _mysql_connector.MySQL.buffered() Method</h2></div></div></div><a class="indexterm" name="id5556"></a><a class="indexterm" name="id5558"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">is_buffered = ccnx.buffered()     # getter
 ccnx.buffered(<em class="replaceable"><code>bool</code></em>)               # setter
@@ -6252,7 +6197,7 @@ ccnx.buffered(<em class="replaceable"><c
       For the setter syntax, raises a <code class="literal">TypeError</code>
       exception if the value is not <code class="literal">True</code> or
       <code class="literal">False</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-change-user"></a>11.6 _mysql_connector.MySQL.change_user() Method</h2></div></div></div><a class="indexterm" name="id5589"></a><a class="indexterm" name="id5591"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-change-user"></a>11.6 _mysql_connector.MySQL.change_user() Method</h2></div></div></div><a class="indexterm" name="id5575"></a><a class="indexterm" name="id5577"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.change_user(user='<em class="replaceable"><code>user_name</code></em>,
                  password='<em class="replaceable"><code>password_val</code></em>',
@@ -6261,7 +6206,7 @@ ccnx.buffered(<em class="replaceable"><c
       Changes the user and sets a new default database. Permitted
       arguments are <code class="literal">user</code>,
       <code class="literal">password</code>, and <code class="literal">database</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-character-set-name"></a>11.7 _mysql_connector.MySQL.character_set_name() Method</h2></div></div></div><a class="indexterm" name="id5604"></a><a class="indexterm" name="id5606"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-character-set-name"></a>11.7 _mysql_connector.MySQL.character_set_name() Method</h2></div></div></div><a class="indexterm" name="id5590"></a><a class="indexterm" name="id5592"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">charset = ccnx.character_set_name()
 </pre><p>
@@ -6272,17 +6217,17 @@ ccnx.buffered(<em class="replaceable"><c
       this is the case, a name usable by Python is returned. For
       example, the <code class="literal">'utf8mb4'</code> MySQL character set name
       is returned as <code class="literal">'utf8'</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-close"></a>11.8 _mysql_connector.MySQL.close() Method</h2></div></div></div><a class="indexterm" name="id5616"></a><a class="indexterm" name="id5618"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-close"></a>11.8 _mysql_connector.MySQL.close() Method</h2></div></div></div><a class="indexterm" name="id5602"></a><a class="indexterm" name="id5604"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.close()
 </pre><p>
       Closes the MySQL connection.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-commit"></a>11.9 _mysql_connector.MySQL.commit() Method</h2></div></div></div><a class="indexterm" name="id5625"></a><a class="indexterm" name="id5627"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-commit"></a>11.9 _mysql_connector.MySQL.commit() Method</h2></div></div></div><a class="indexterm" name="id5611"></a><a class="indexterm" name="id5613"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.commit()
 </pre><p>
       Commits the current transaction.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-connect"></a>11.10 _mysql_connector.MySQL.connect() Method</h2></div></div></div><a class="indexterm" name="id5634"></a><a class="indexterm" name="id5636"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-connect"></a>11.10 _mysql_connector.MySQL.connect() Method</h2></div></div></div><a class="indexterm" name="id5620"></a><a class="indexterm" name="id5622"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.connect(<em class="replaceable"><code>args</code></em>)
 </pre><p>
@@ -6309,14 +6254,14 @@ ccnx.close()
     </p><p>
       Raises a <code class="literal">TypeError</code> exception if any argument is
       of an invalid type.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-connected"></a>11.11 _mysql_connector.MySQL.connected() Method</h2></div></div></div><a class="indexterm" name="id5666"></a><a class="indexterm" name="id5668"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-connected"></a>11.11 _mysql_connector.MySQL.connected() Method</h2></div></div></div><a class="indexterm" name="id5652"></a><a class="indexterm" name="id5654"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">is_connected = ccnx.connected()
 </pre><p>
       Returns <code class="literal">True</code> or <code class="literal">False</code> to
       indicate whether the <code class="literal">MySQL</code> instance is
       connected.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-consume-result"></a>11.12 _mysql_connector.MySQL.consume_result() Method</h2></div></div></div><a class="indexterm" name="id5678"></a><a class="indexterm" name="id5680"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-consume-result"></a>11.12 _mysql_connector.MySQL.consume_result() Method</h2></div></div></div><a class="indexterm" name="id5664"></a><a class="indexterm" name="id5666"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.consume_result()
 </pre><p>
@@ -6324,7 +6269,7 @@ ccnx.close()
       <code class="literal">MySQL</code> instance, by fetching all rows. If the
       statement that was executed returned multiple result sets, this
       method loops over and consumes all of them.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-convert-to-mysql"></a>11.13 _mysql_connector.MySQL.convert_to_mysql() Method</h2></div></div></div><a class="indexterm" name="id5688"></a><a class="indexterm" name="id5690"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-convert-to-mysql"></a>11.13 _mysql_connector.MySQL.convert_to_mysql() Method</h2></div></div></div><a class="indexterm" name="id5674"></a><a class="indexterm" name="id5676"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">converted_obj = ccnx.convert_to_mysql(<em class="replaceable"><code>obj</code></em>))
 </pre><p>
@@ -6338,7 +6283,7 @@ ccnx.consume_result()
 </pre><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception if the
       Python object cannot be converted.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-escape-string"></a>11.14 _mysql_connector.MySQL.escape_string() Method</h2></div></div></div><a class="indexterm" name="id5701"></a><a class="indexterm" name="id5703"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-escape-string"></a>11.14 _mysql_connector.MySQL.escape_string() Method</h2></div></div></div><a class="indexterm" name="id5687"></a><a class="indexterm" name="id5689"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">str = ccnx.escape_string(<em class="replaceable"><code>str_to_escape</code></em>)
 </pre><p>
@@ -6351,7 +6296,7 @@ ccnx.consume_result()
       or (for Python 2) <code class="literal">string</code> type. Raises a
       <code class="literal">MySQLError</code> exception if the string could not be
       escaped.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-fetch-fields"></a>11.15 _mysql_connector.MySQL.fetch_fields() Method</h2></div></div></div><a class="indexterm" name="id5719"></a><a class="indexterm" name="id5721"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-fetch-fields"></a>11.15 _mysql_connector.MySQL.fetch_fields() Method</h2></div></div></div><a class="indexterm" name="id5705"></a><a class="indexterm" name="id5707"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">field_info = ccnx.fetch_fields()
 </pre><p>
@@ -6365,7 +6310,7 @@ field_info = ccnx.fetch_fields()
 for fi in field_info:
   print(fi)
 ccnx.consume_result()
-</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-fetch-row"></a>11.16 _mysql_connector.MySQL.fetch_row() Method</h2></div></div></div><a class="indexterm" name="id5731"></a><a class="indexterm" name="id5733"></a><p>
+</pre></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-fetch-row"></a>11.16 _mysql_connector.MySQL.fetch_row() Method</h2></div></div></div><a class="indexterm" name="id5717"></a><a class="indexterm" name="id5719"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">row = ccnx.fetch_row()
 </pre><p>
@@ -6379,12 +6324,12 @@ ccnx.free_result()
 </pre><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception for any
       MySQL error returned by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-field-count"></a>11.17 _mysql_connector.MySQL.field_count() Method</h2></div></div></div><a class="indexterm" name="id5744"></a><a class="indexterm" name="id5746"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-field-count"></a>11.17 _mysql_connector.MySQL.field_count() Method</h2></div></div></div><a class="indexterm" name="id5730"></a><a class="indexterm" name="id5732"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.field_count()
 </pre><p>
       Returns the number of columns in the active result set.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-free-result"></a>11.18 _mysql_connector.MySQL.free_result() Method</h2></div></div></div><a class="indexterm" name="id5753"></a><a class="indexterm" name="id5755"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-free-result"></a>11.18 _mysql_connector.MySQL.free_result() Method</h2></div></div></div><a class="indexterm" name="id5739"></a><a class="indexterm" name="id5741"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.free_result()
 </pre><p>
@@ -6392,7 +6337,7 @@ ccnx.free_result()
       <code class="literal">MySQL</code> instance. If the statement that was
       executed returned multiple result sets, this method loops over and
       consumes all of them.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-character-set-info"></a>11.19 _mysql_connector.MySQL.get_character_set_info() Method</h2></div></div></div><a class="indexterm" name="id5763"></a><a class="indexterm" name="id5765"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-character-set-info"></a>11.19 _mysql_connector.MySQL.get_character_set_info() Method</h2></div></div></div><a class="indexterm" name="id5749"></a><a class="indexterm" name="id5751"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_character_set_info()
 </pre><p>
@@ -6402,64 +6347,64 @@ ccnx.free_result()
       <code class="literal">csname</code>, <code class="literal">comment</code>,
       <code class="literal">dir</code>, <code class="literal">mbminlen</code>, and
       <code class="literal">mbmaxlen</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-client-info"></a>11.20 _mysql_connector.MySQL.get_client_info() Method</h2></div></div></div><a class="indexterm" name="id5779"></a><a class="indexterm" name="id5781"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-client-info"></a>11.20 _mysql_connector.MySQL.get_client_info() Method</h2></div></div></div><a class="indexterm" name="id5765"></a><a class="indexterm" name="id5767"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_client_info()
 </pre><p>
       Returns the MySQL client library version as a string.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-client-version"></a>11.21 _mysql_connector.MySQL.get_client_version() Method</h2></div></div></div><a class="indexterm" name="id5788"></a><a class="indexterm" name="id5790"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-client-version"></a>11.21 _mysql_connector.MySQL.get_client_version() Method</h2></div></div></div><a class="indexterm" name="id5774"></a><a class="indexterm" name="id5776"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_client_version()
 </pre><p>
       Returns the MySQL client library version as a tuple.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-host-info"></a>11.22 _mysql_connector.MySQL.get_host_info() Method</h2></div></div></div><a class="indexterm" name="id5797"></a><a class="indexterm" name="id5799"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-host-info"></a>11.22 _mysql_connector.MySQL.get_host_info() Method</h2></div></div></div><a class="indexterm" name="id5783"></a><a class="indexterm" name="id5785"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_host_info()
 </pre><p>
       Returns a description of the type of connection in use as a
       string.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-proto-info"></a>11.23 _mysql_connector.MySQL.get_proto_info() Method</h2></div></div></div><a class="indexterm" name="id5806"></a><a class="indexterm" name="id5808"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-proto-info"></a>11.23 _mysql_connector.MySQL.get_proto_info() Method</h2></div></div></div><a class="indexterm" name="id5792"></a><a class="indexterm" name="id5794"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_proto_info()
 </pre><p>
       Returns the protocol version used by the current session.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-server-info"></a>11.24 _mysql_connector.MySQL.get_server_info() Method</h2></div></div></div><a class="indexterm" name="id5815"></a><a class="indexterm" name="id5817"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-server-info"></a>11.24 _mysql_connector.MySQL.get_server_info() Method</h2></div></div></div><a class="indexterm" name="id5801"></a><a class="indexterm" name="id5803"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_server_info()
 </pre><p>
       Returns the MySQL server version as a string.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-server-version"></a>11.25 _mysql_connector.MySQL.get_server_version() Method</h2></div></div></div><a class="indexterm" name="id5824"></a><a class="indexterm" name="id5826"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-server-version"></a>11.25 _mysql_connector.MySQL.get_server_version() Method</h2></div></div></div><a class="indexterm" name="id5810"></a><a class="indexterm" name="id5812"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_server_version()
 </pre><p>
       Returns the MySQL server version as a tuple.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-ssl-cipher"></a>11.26 _mysql_connector.MySQL.get_ssl_cipher() Method</h2></div></div></div><a class="indexterm" name="id5833"></a><a class="indexterm" name="id5835"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-get-ssl-cipher"></a>11.26 _mysql_connector.MySQL.get_ssl_cipher() Method</h2></div></div></div><a class="indexterm" name="id5819"></a><a class="indexterm" name="id5821"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.get_ssl_cipher()
 </pre><p>
       Returns the SSL cipher used for the current session, or
       <code class="literal">None</code> if SSL is not in use.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-hex-string"></a>11.27 _mysql_connector.MySQL.hex_string() Method</h2></div></div></div><a class="indexterm" name="id5843"></a><a class="indexterm" name="id5845"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-hex-string"></a>11.27 _mysql_connector.MySQL.hex_string() Method</h2></div></div></div><a class="indexterm" name="id5829"></a><a class="indexterm" name="id5831"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">str = ccnx.hex_string(<em class="replaceable"><code>string_to_hexify</code></em>)
 </pre><p>
       Encodes a value in hexadecimal format and wraps it within
       <code class="literal">X''</code>. For example, <code class="literal">"ham"</code>
       becomes <code class="literal">X'68616D'</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-insert-id"></a>11.28 _mysql_connector.MySQL.insert_id() Method</h2></div></div></div><a class="indexterm" name="id5856"></a><a class="indexterm" name="id5858"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-insert-id"></a>11.28 _mysql_connector.MySQL.insert_id() Method</h2></div></div></div><a class="indexterm" name="id5842"></a><a class="indexterm" name="id5844"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">insert_id = ccnx.insert_id()
 </pre><p>
       Returns the <code class="literal">AUTO_INCREMENT</code> value generated by
       the most recent executed statement, or 0 if there is no such
       value.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-more-results"></a>11.29 _mysql_connector.MySQL.more_results() Method</h2></div></div></div><a class="indexterm" name="id5866"></a><a class="indexterm" name="id5868"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-more-results"></a>11.29 _mysql_connector.MySQL.more_results() Method</h2></div></div></div><a class="indexterm" name="id5852"></a><a class="indexterm" name="id5854"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">more = ccnx.more_results()
 </pre><p>
       Returns <code class="literal">True</code> or <code class="literal">False</code> to
       indicate whether any more result sets exist.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-next-result"></a>11.30 _mysql_connector.MySQL.next_result() Method</h2></div></div></div><a class="indexterm" name="id5877"></a><a class="indexterm" name="id5879"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-next-result"></a>11.30 _mysql_connector.MySQL.next_result() Method</h2></div></div></div><a class="indexterm" name="id5863"></a><a class="indexterm" name="id5865"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.next_result()
 </pre><p>
@@ -6468,12 +6413,12 @@ ccnx.free_result()
     </p><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception for any
       MySQL error returned by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-num-fields"></a>11.31 _mysql_connector.MySQL.num_fields() Method</h2></div></div></div><a class="indexterm" name="id5888"></a><a class="indexterm" name="id5890"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-num-fields"></a>11.31 _mysql_connector.MySQL.num_fields() Method</h2></div></div></div><a class="indexterm" name="id5874"></a><a class="indexterm" name="id5876"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.num_fields()
 </pre><p>
       Returns the number of columns in the active result set.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-num-rows"></a>11.32 _mysql_connector.MySQL.num_rows() Method</h2></div></div></div><a class="indexterm" name="id5897"></a><a class="indexterm" name="id5899"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-num-rows"></a>11.32 _mysql_connector.MySQL.num_rows() Method</h2></div></div></div><a class="indexterm" name="id5883"></a><a class="indexterm" name="id5885"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.num_rows()
 </pre><p>
@@ -6481,13 +6426,13 @@ ccnx.free_result()
     </p><p>
       Raises a <code class="literal">MySQLError</code> exception if there is no
       result set.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-ping"></a>11.33 _mysql_connector.MySQL.ping() Method</h2></div></div></div><a class="indexterm" name="id5908"></a><a class="indexterm" name="id5910"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-ping"></a>11.33 _mysql_connector.MySQL.ping() Method</h2></div></div></div><a class="indexterm" name="id5894"></a><a class="indexterm" name="id5896"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">alive = ccnx.ping()
 </pre><p>
       Returns <code class="literal">True</code> or <code class="literal">False</code> to
       indicate whether the connection to the MySQL server is working.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-query"></a>11.34 _mysql_connector.MySQL.query() Method</h2></div></div></div><a class="indexterm" name="id5919"></a><a class="indexterm" name="id5921"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-query"></a>11.34 _mysql_connector.MySQL.query() Method</h2></div></div></div><a class="indexterm" name="id5905"></a><a class="indexterm" name="id5907"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.query(<em class="replaceable"><code>args</code></em>)
 </pre><p>
@@ -6518,7 +6463,7 @@ ccnx.consume_result()
       <code class="literal">TypeError</code> exception if any argument has an
       invalid type, and a <code class="literal">MySQLInterfaceError</code>
       exception for any MySQL error returned by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-raw"></a>11.35 _mysql_connector.MySQL.raw() Method</h2></div></div></div><a class="indexterm" name="id5949"></a><a class="indexterm" name="id5951"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-raw"></a>11.35 _mysql_connector.MySQL.raw() Method</h2></div></div></div><a class="indexterm" name="id5935"></a><a class="indexterm" name="id5937"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">is_raw = ccnx.raw()     # getter
 ccnx.raw(<em class="replaceable"><code>bool</code></em>)          # setter
@@ -6530,7 +6475,7 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       With a boolean argument, sets the <code class="literal">MySQL</code>
       instance raw mode.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-refresh"></a>11.36 _mysql_connector.MySQL.refresh() Method</h2></div></div></div><a class="indexterm" name="id5964"></a><a class="indexterm" name="id5966"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-refresh"></a>11.36 _mysql_connector.MySQL.refresh() Method</h2></div></div></div><a class="indexterm" name="id5950"></a><a class="indexterm" name="id5952"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.refresh(<em class="replaceable"><code>flags</code></em>)
 </pre><p>
@@ -6539,13 +6484,13 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">TypeError</code> exception if the first
       argument is not an integer.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-reset-connection"></a>11.37 _mysql_connector.MySQL.reset_connection() Method</h2></div></div></div><a class="indexterm" name="id5976"></a><a class="indexterm" name="id5978"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-reset-connection"></a>11.37 _mysql_connector.MySQL.reset_connection() Method</h2></div></div></div><a class="indexterm" name="id5962"></a><a class="indexterm" name="id5964"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.reset_connection()
 </pre><p>
       Resets the user variables and session variables for a connection
       session.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-rollback"></a>11.38 _mysql_connector.MySQL.rollback() Method</h2></div></div></div><a class="indexterm" name="id5985"></a><a class="indexterm" name="id5987"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-rollback"></a>11.38 _mysql_connector.MySQL.rollback() Method</h2></div></div></div><a class="indexterm" name="id5971"></a><a class="indexterm" name="id5973"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.rollback()
 </pre><p>
@@ -6553,7 +6498,7 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception on
       errors.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-select-db"></a>11.39 _mysql_connector.MySQL.select_db() Method</h2></div></div></div><a class="indexterm" name="id5996"></a><a class="indexterm" name="id5998"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-select-db"></a>11.39 _mysql_connector.MySQL.select_db() Method</h2></div></div></div><a class="indexterm" name="id5982"></a><a class="indexterm" name="id5984"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.select_db(<em class="replaceable"><code>db_name</code></em>)
 </pre><p>
@@ -6561,7 +6506,7 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">MySQLInterfaceError</code> exception for any
       MySQL error returned by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-set-character-set"></a>11.40 _mysql_connector.MySQL.set_character_set() Method</h2></div></div></div><a class="indexterm" name="id6008"></a><a class="indexterm" name="id6010"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-set-character-set"></a>11.40 _mysql_connector.MySQL.set_character_set() Method</h2></div></div></div><a class="indexterm" name="id5994"></a><a class="indexterm" name="id5996"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.set_character_set(<em class="replaceable"><code>charset_name</code></em>)
 </pre><p>
@@ -6571,7 +6516,7 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">TypeError</code> exception if the argument is
       not a <code class="literal">PyString_type</code>.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-shutdown"></a>11.41 _mysql_connector.MySQL.shutdown() Method</h2></div></div></div><a class="indexterm" name="id6021"></a><a class="indexterm" name="id6023"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-shutdown"></a>11.41 _mysql_connector.MySQL.shutdown() Method</h2></div></div></div><a class="indexterm" name="id6007"></a><a class="indexterm" name="id6009"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">ccnx.shutdown(<em class="replaceable"><code>flags</code></em>)
 </pre><p>
@@ -6582,7 +6527,7 @@ ccnx.raw(<em class="replaceable"><code>b
       argument is not an integer. Raises a
       <code class="literal">MySQLErrorInterface</code> exception if an error is
       retured by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-stat"></a>11.42 _mysql_connector.MySQL.stat() Method</h2></div></div></div><a class="indexterm" name="id6034"></a><a class="indexterm" name="id6036"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-stat"></a>11.42 _mysql_connector.MySQL.stat() Method</h2></div></div></div><a class="indexterm" name="id6020"></a><a class="indexterm" name="id6022"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">info = ccnx.stat()
 </pre><p>
@@ -6590,12 +6535,12 @@ ccnx.raw(<em class="replaceable"><code>b
     </p><p>
       Raises a <code class="literal">MySQLErrorInterface</code> exception if an
       error is retured by the MySQL server.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-thread-id"></a>11.43 _mysql_connector.MySQL.thread_id() Method</h2></div></div></div><a class="indexterm" name="id6045"></a><a class="indexterm" name="id6047"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-thread-id"></a>11.43 _mysql_connector.MySQL.thread_id() Method</h2></div></div></div><a class="indexterm" name="id6031"></a><a class="indexterm" name="id6033"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">thread_id = ccnx.thread_id()
 </pre><p>
       Returns the current thread or connection ID.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-use-unicode"></a>11.44 _mysql_connector.MySQL.use_unicode() Method</h2></div></div></div><a class="indexterm" name="id6054"></a><a class="indexterm" name="id6056"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-use-unicode"></a>11.44 _mysql_connector.MySQL.use_unicode() Method</h2></div></div></div><a class="indexterm" name="id6040"></a><a class="indexterm" name="id6042"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">is_unicode = ccnx.use_unicode()      # getter
 ccnx.use_unicode(<em class="replaceable"><code>bool</code></em>)               # setter
@@ -6607,13 +6552,13 @@ ccnx.use_unicode(<em class="replaceable"
     </p><p>
       With a boolean argument, sets whether the <code class="literal">MySQL</code>
       instance returns nonbinary strings as Unicode.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-warning-count"></a>11.45 _mysql_connector.MySQL.warning_count() Method</h2></div></div></div><a class="indexterm" name="id6069"></a><a class="indexterm" name="id6071"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-warning-count"></a>11.45 _mysql_connector.MySQL.warning_count() Method</h2></div></div></div><a class="indexterm" name="id6055"></a><a class="indexterm" name="id6057"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">count = ccnx.warning_count()
 </pre><p>
       Returns the number of errors, warnings, and notes produced by the
       previous SQL statement.
-    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-have-result-set"></a>11.46 _mysql_connector.MySQL.have_result_set Property</h2></div></div></div><a class="indexterm" name="id6078"></a><a class="indexterm" name="id6080"></a><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="connector-python-api-cext-have-result-set"></a>11.46 _mysql_connector.MySQL.have_result_set Property</h2></div></div></div><a class="indexterm" name="id6064"></a><a class="indexterm" name="id6066"></a><p>
       Syntax:
     </p><pre data-lang="python" class="programlisting">has_rows = ccnx.have_result_set
 </pre><p>
@@ -6627,4 +6572,4 @@ ccnx.use_unicode(<em class="replaceable"
 &nbsp;|&nbsp;<a href="#connector-python_index0_M">M</a>
 &nbsp;|&nbsp;<a href="#connector-python_index0_P">P</a>
 &nbsp;|&nbsp;<a href="#connector-python_index0_S">S</a>
-</p><div class="indexdiv"><h3><a name="connector-python_index0_Symbols"></a>Symbols</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id5503">_mysql_connector module, <a class="indexterm" href="#connector-python-api-cext-mysql-connector">_mysql_connector Module</a></dt><dt id="ientry-id5511">_mysql_connector.MySQL() class, <a class="indexterm" href="#connector-python-api-cext-mysql">_mysql_connector.MySQL() Class</a></dt><dt id="ientry-id5540">_mysql_connector.MySQL.affected_rows() method, <a class="indexterm" href="#connector-python-api-cext-affected-rows">_mysql_connector.MySQL.affected_rows() Method</a></dt><dt id="ientry-id5555">_mysql_connector.MySQL.autocommit() method, <a class="indexterm" href="#connector-python-api-cext-autocommit">_mysql_connector.MySQL.autocommit() Method</a></dt><dt id="ientry-id5570">_mysql_connector.MySQL.buffered() method, <a class="indexterm" href="#connector-python-api-cext-buffered">_mysql_connector.MySQL.buffered() Method</a></dt><dt id="ientry-id5589">_mysql_connector.MySQL.change_user() method, <a class="indexterm" href="#connector-python-api-cext-change-user">_mysql_connector.MySQL.change_user() Method</a></dt><dt id="ientry-id5604">_mysql_connector.MySQL.character_set_name() method, <a class="indexterm" href="#connector-python-api-cext-character-set-name">_mysql_connector.MySQL.character_set_name() Method</a></dt><dt id="ientry-id5616">_mysql_connector.MySQL.close() method, <a class="indexterm" href="#connector-python-api-cext-close">_mysql_connector.MySQL.close() Method</a></dt><dt id="ientry-id5625">_mysql_connector.MySQL.commit() method, <a class="indexterm" href="#connector-python-api-cext-commit">_mysql_connector.MySQL.commit() Method</a></dt><dt id="ientry-id5634">_mysql_connector.MySQL.connect() method, <a class="indexterm" href="#connector-python-api-cext-connect">_mysql_connector.MySQL.connect() Method</a></dt><dt id="ientry-id5666">_mysql_connector.MySQL.connected() method, <a class="indexterm" href="#connector-python-api-cext-connected">_mysql_connector.MySQL.connected() Method</a></dt><dt id="ientry-id5678">_mysql_connector.MySQL.consume_result() method, <a class="indexterm" href="#connector-python-api-cext-consume-result">_mysql_connector.MySQL.consume_result() Method</a></dt><dt id="ientry-id5688">_mysql_connector.MySQL.convert_to_mysql() method, <a class="indexterm" href="#connector-python-api-cext-convert-to-mysql">_mysql_connector.MySQL.convert_to_mysql() Method</a></dt><dt id="ientry-id5701">_mysql_connector.MySQL.escape_string() method, <a class="indexterm" href="#connector-python-api-cext-escape-string">_mysql_connector.MySQL.escape_string() Method</a></dt><dt id="ientry-id5719">_mysql_connector.MySQL.fetch_fields() method, <a class="indexterm" href="#connector-python-api-cext-fetch-fields">_mysql_connector.MySQL.fetch_fields() Method</a></dt><dt id="ientry-id5731">_mysql_connector.MySQL.fetch_row() method, <a class="indexterm" href="#connector-python-api-cext-fetch-row">_mysql_connector.MySQL.fetch_row() Method</a></dt><dt id="ientry-id5744">_mysql_connector.MySQL.field_count() method, <a class="indexterm" href="#connector-python-api-cext-field-count">_mysql_connector.MySQL.field_count() Method</a></dt><dt id="ientry-id5753">_mysql_connector.MySQL.free_result() method, <a class="indexterm" href="#connector-python-api-cext-free-result">_mysql_connector.MySQL.free_result() Method</a></dt><dt id="ientry-id5763">_mysql_connector.MySQL.get_character_set_info() method, <a class="indexterm" href="#connector-python-api-cext-get-character-set-info">_mysql_connector.MySQL.get_character_set_info() Method</a></dt><dt id="ientry-id5779">_mysql_connector.MySQL.get_client_info() method, <a class="indexterm" href="#connector-python-api-cext-get-client-info">_mysql_connector.MySQL.get_client_info() Method</a></dt><dt id="ientry-id5788">_mysql_connector.MySQL.get_client_version() method, <a class="indexterm" href="#connector-python-api-cext-get-client-version">_mysql_connector.MySQL.get_client_version() Method</a></dt><dt id="ientry-id5797">_mysql_connector.MySQL.get_host_info() method, <a class="indexterm" href="#connector-python-api-cext-get-host-info">_mysql_connector.MySQL.get_host_info() Method</a></dt><dt id="ientry-id5806">_mysql_connector.MySQL.get_proto_info() method, <a class="indexterm" href="#connector-python-api-cext-get-proto-info">_mysql_connector.MySQL.get_proto_info() Method</a></dt><dt id="ientry-id5815">_mysql_connector.MySQL.get_server_info() method, <a class="indexterm" href="#connector-python-api-cext-get-server-info">_mysql_connector.MySQL.get_server_info() Method</a></dt><dt id="ientry-id5824">_mysql_connector.MySQL.get_server_version() method, <a class="indexterm" href="#connector-python-api-cext-get-server-version">_mysql_connector.MySQL.get_server_version() Method</a></dt><dt id="ientry-id5833">_mysql_connector.MySQL.get_ssl_cipher() method, <a class="indexterm" href="#connector-python-api-cext-get-ssl-cipher">_mysql_connector.MySQL.get_ssl_cipher() Method</a></dt><dt id="ientry-id6078">_mysql_connector.MySQL.have_result_set property, <a class="indexterm" href="#connector-python-api-cext-have-result-set">_mysql_connector.MySQL.have_result_set Property</a></dt><dt id="ientry-id5843">_mysql_connector.MySQL.hex_string() method, <a class="indexterm" href="#connector-python-api-cext-hex-string">_mysql_connector.MySQL.hex_string() Method</a></dt><dt id="ientry-id5856">_mysql_connector.MySQL.insert_id() method, <a class="indexterm" href="#connector-python-api-cext-insert-id">_mysql_connector.MySQL.insert_id() Method</a></dt><dt id="ientry-id5866">_mysql_connector.MySQL.more_results() method, <a class="indexterm" href="#connector-python-api-cext-more-results">_mysql_connector.MySQL.more_results() Method</a></dt><dt id="ientry-id5877">_mysql_connector.MySQL.next_result() method, <a class="indexterm" href="#connector-python-api-cext-next-result">_mysql_connector.MySQL.next_result() Method</a></dt><dt id="ientry-id5888">_mysql_connector.MySQL.num_fields() method, <a class="indexterm" href="#connector-python-api-cext-num-fields">_mysql_connector.MySQL.num_fields() Method</a></dt><dt id="ientry-id5897">_mysql_connector.MySQL.num_rows() method, <a class="indexterm" href="#connector-python-api-cext-num-rows">_mysql_connector.MySQL.num_rows() Method</a></dt><dt id="ientry-id5908">_mysql_connector.MySQL.ping() method, <a class="indexterm" href="#connector-python-api-cext-ping">_mysql_connector.MySQL.ping() Method</a></dt><dt id="ientry-id5919">_mysql_connector.MySQL.query() method, <a class="indexterm" href="#connector-python-api-cext-query">_mysql_connector.MySQL.query() Method</a></dt><dt id="ientry-id5949">_mysql_connector.MySQL.raw() method, <a class="indexterm" href="#connector-python-api-cext-raw">_mysql_connector.MySQL.raw() Method</a></dt><dt id="ientry-id5964">_mysql_connector.MySQL.refresh() method, <a class="indexterm" href="#connector-python-api-cext-refresh">_mysql_connector.MySQL.refresh() Method</a></dt><dt id="ientry-id5976">_mysql_connector.MySQL.reset_connection() method, <a class="indexterm" href="#connector-python-api-cext-reset-connection">_mysql_connector.MySQL.reset_connection() Method</a></dt><dt id="ientry-id5985">_mysql_connector.MySQL.rollback() method, <a class="indexterm" href="#connector-python-api-cext-rollback">_mysql_connector.MySQL.rollback() Method</a></dt><dt id="ientry-id5996">_mysql_connector.MySQL.select_db() method, <a class="indexterm" href="#connector-python-api-cext-select-db">_mysql_connector.MySQL.select_db() Method</a></dt><dt id="ientry-id6008">_mysql_connector.MySQL.set_character_set() method, <a class="indexterm" href="#connector-python-api-cext-set-character-set">_mysql_connector.MySQL.set_character_set() Method</a></dt><dt id="ientry-id6021">_mysql_connector.MySQL.shutdown() method, <a class="indexterm" href="#connector-python-api-cext-shutdown">_mysql_connector.MySQL.shutdown() Method</a></dt><dt id="ientry-id6034">_mysql_connector.MySQL.stat() method, <a class="indexterm" href="#connector-python-api-cext-stat">_mysql_connector.MySQL.stat() Method</a></dt><dt id="ientry-id6045">_mysql_connector.MySQL.thread_id() method, <a class="indexterm" href="#connector-python-api-cext-thread-id">_mysql_connector.MySQL.thread_id() Method</a></dt><dt id="ientry-id6054">_mysql_connector.MySQL.use_unicode() method, <a class="indexterm" href="#connector-python-api-cext-use-unicode">_mysql_connector.MySQL.use_unicode() Method</a></dt><dt id="ientry-id6069">_mysql_connector.MySQL.warning_count() method, <a class="indexterm" href="#connector-python-api-cext-warning-count">_mysql_connector.MySQL.warning_count() Method</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_C"></a>C</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id3394">class</dt><dd><dl><dt>connection.MySQLConnection, <a class="indexterm" href="#connector-python-api-mysqlconnection">connection.MySQLConnection Class</a></dt><dt>constants.CharacterSet, <a class="indexterm" href="#connector-python-api-characterset">constants.CharacterSet Class</a></dt><dt>constants.ClientFlag, <a class="indexterm" href="#connector-python-api-clientflag">constants.ClientFlag Class</a></dt><dt>constants.FieldType, <a class="indexterm" href="#connector-python-api-fieldtype">constants.FieldType Class</a></dt><dt>constants.RefreshOption, <a class="indexterm" href="#connector-python-api-refreshoption">constants.RefreshOption Class</a></dt><dt>constants.SQLMode, <a class="indexterm" href="#connector-python-api-sqlmode">constants.SQLMode Class</a></dt><dt>cursor.MySQLCursor, <a class="indexterm" href="#connector-python-api-mysqlcursor">cursor.MySQLCursor Class</a></dt><dt>cursor.MySQLCursorBuffered, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffered">cursor.MySQLCursorBuffered Class</a></dt><dt>cursor.MySQLCursorBufferedDict, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffereddict">cursor.MySQLCursorBufferedDict Class</a></dt><dt>cursor.MySQLCursorDict, <a class="indexterm" href="#connector-python-api-mysqlcursordict">cursor.MySQLCursorDict Class</a></dt><dt>cursor.MySQLCursorPrepared, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt>cursor.MySQLCursorRaw, <a class="indexterm" href="#connector-python-api-mysqlcursorraw">cursor.MySQLCursorRaw Class</a></dt><dt>pooling.MySQLConnectionPool, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool">pooling.MySQLConnectionPool Class</a></dt><dt>pooling.PooledMySQLConnection, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection">pooling.PooledMySQLConnection Class</a></dt><dt>_mysql_connector.MySQL(), <a class="indexterm" href="#connector-python-api-cext-mysql">_mysql_connector.MySQL() Class</a></dt></dl></dd><dt id="ientry-id5026">COM_STMT_SEND_LONG_DATA</dt><dd><dl><dt>prepared statements, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt></dl></dd><dt id="ientry-id3392">connection.MySQLConnection class, <a class="indexterm" href="#connector-python-api-mysqlconnection">connection.MySQLConnection Class</a></dt><dt id="ientry-id3400">connection.MySQLConnection() constructor, <a class="indexterm" href="#connector-python-api-mysqlconnection-constructor">connection.MySQLConnection() Constructor</a></dt><dt id="ientry-id1571">Connector/Python, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id5073">constants.CharacterSet class, <a class="indexterm" href="#connector-python-api-characterset">constants.CharacterSet Class</a></dt><dt id="ientry-id5034">constants.ClientFlag class, <a class="indexterm" href="#connector-python-api-clientflag">constants.ClientFlag Class</a></dt><dt id="ientry-id5050">constants.FieldType class, <a class="indexterm" href="#connector-python-api-fieldtype">constants.FieldType Class</a></dt><dt id="ientry-id5083">constants.RefreshOption class, <a class="indexterm" href="#connector-python-api-refreshoption">constants.RefreshOption Class</a></dt><dt id="ientry-id5061">constants.SQLMode class, <a class="indexterm" href="#connector-python-api-sqlmode">constants.SQLMode Class</a></dt><dt id="ientry-id3402">constructor</dt><dd><dl><dt>connection.MySQLConnection(), <a class="indexterm" href="#connector-python-api-mysqlconnection-constructor">connection.MySQLConnection() Constructor</a></dt><dt>cursor.MySQLCursor, <a class="indexterm" href="#connector-python-api-mysqlcursor-constructor">cursor.MySQLCursor Constructor</a></dt><dt>pooling.MySQLConnectionPool, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-constructor">pooling.MySQLConnectionPool Constructor</a></dt><dt>pooling.PooledMySQLConnection, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-constructor">pooling.PooledMySQLConnection Constructor</a></dt></dl></dd><dt id="ientry-id4858">cursor.mysqlcursor</dt><dd><dl><dt>Subclasses, <a class="indexterm" href="#connector-python-api-cursor-subclasses">Subclasses cursor.MySQLCursor</a></dt></dl></dd><dt id="ientry-id4413">cursor.MySQLCursor class, <a class="indexterm" href="#connector-python-api-mysqlcursor">cursor.MySQLCursor Class</a></dt><dt id="ientry-id4455">cursor.MySQLCursor constructor, <a class="indexterm" href="#connector-python-api-mysqlcursor-constructor">cursor.MySQLCursor Constructor</a></dt><dt id="ientry-id4865">cursor.MySQLCursorBuffered class, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffered">cursor.MySQLCursorBuffered Class</a></dt><dt id="ientry-id4932">cursor.MySQLCursorBufferedDict class, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffereddict">cursor.MySQLCursorBufferedDict Class</a></dt><dt id="ientry-id4913">cursor.MySQLCursorDict class, <a class="indexterm" href="#connector-python-api-mysqlcursordict">cursor.MySQLCursorDict Class</a></dt><dt id="ientry-id4950">cursor.MySQLCursorPrepared class, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt id="ientry-id4893">cursor.MySQLCursorRaw class, <a class="indexterm" href="#connector-python-api-mysqlcursorraw">cursor.MySQLCursorRaw Class</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_D"></a>D</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id2962">DYLD_LIBRARY_PATH environment variable, <a class="indexterm" href="#connector-python-cext-development">Application Development with the Connector/Python C Extension</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_E"></a>E</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id2964">environment variable</dt><dd><dl><dt>DYLD_LIBRARY_PATH, <a class="indexterm" href="#connector-python-cext-development">Application Development with the Connector/Python C Extension</a></dt></dl></dd><dt id="ientry-id5309">errorcode module, <a class="indexterm" href="#connector-python-api-errorcode">errorcode Module</a></dt><dt id="ientry-id5467">errors.custom_error_exception() function, <a class="indexterm" href="#connector-python-api-errors-custom-error-exception">errors.custom_error_exception() Function</a></dt><dt id="ientry-id5371">errors.DatabaseError exception, <a class="indexterm" href="#connector-python-api-errors-databaseerror">errors.DatabaseError Exception</a></dt><dt id="ientry-id5359">errors.DataError exception, <a class="indexterm" href="#connector-python-api-errors-dataerror">errors.DataError Exception</a></dt><dt id="ientry-id5319">errors.Error exception, <a class="indexterm" href="#connector-python-api-errors-error">errors.Error Exception</a></dt><dt id="ientry-id5381">errors.IntegrityError exception, <a class="indexterm" href="#connector-python-api-errors-integrityerror">errors.IntegrityError Exception</a></dt><dt id="ientry-id5393">errors.InterfaceError exception, <a class="indexterm" href="#connector-python-api-errors-interfaceerror">errors.InterfaceError Exception</a></dt><dt id="ientry-id5403">errors.InternalError exception, <a class="indexterm" href="#connector-python-api-errors-internalerror">errors.InternalError Exception</a></dt><dt id="ientry-id5413">errors.NotSupportedError exception, <a class="indexterm" href="#connector-python-api-errors-notsupportederror">errors.NotSupportedError Exception</a></dt><dt id="ientry-id5423">errors.OperationalError exception, <a class="indexterm" href="#connector-python-api-errors-operationalerror">errors.OperationalError Exception</a></dt><dt id="ientry-id5433">errors.PoolError exception, <a class="indexterm" href="#connector-python-api-errors-poolerror">errors.PoolError Exception</a></dt><dt id="ientry-id5442">errors.ProgrammingError exception, <a class="indexterm" href="#connector-python-api-errors-programmingerror">errors.ProgrammingError Exception</a></dt><dt id="ientry-id5454">errors.Warning exception, <a class="indexterm" href="#connector-python-api-errors-warning">errors.Warning Exception</a></dt><dt id="ientry-id5321">exception</dt><dd><dl><dt>errors.DatabaseError, <a class="indexterm" href="#connector-python-api-errors-databaseerror">errors.DatabaseError Exception</a></dt><dt>errors.DataError, <a class="indexterm" href="#connector-python-api-errors-dataerror">errors.DataError Exception</a></dt><dt>errors.Error, <a class="indexterm" href="#connector-python-api-errors-error">errors.Error Exception</a></dt><dt>errors.IntegrityError, <a class="indexterm" href="#connector-python-api-errors-integrityerror">errors.IntegrityError Exception</a></dt><dt>errors.InterfaceError, <a class="indexterm" href="#connector-python-api-errors-interfaceerror">errors.InterfaceError Exception</a></dt><dt>errors.InternalError, <a class="indexterm" href="#connector-python-api-errors-internalerror">errors.InternalError Exception</a></dt><dt>errors.NotSupportedError, <a class="indexterm" href="#connector-python-api-errors-notsupportederror">errors.NotSupportedError Exception</a></dt><dt>errors.OperationalError, <a class="indexterm" href="#connector-python-api-errors-operationalerror">errors.OperationalError Exception</a></dt><dt>errors.PoolError, <a class="indexterm" href="#connector-python-api-errors-poolerror">errors.PoolError Exception</a></dt><dt>errors.ProgrammingError, <a class="indexterm" href="#connector-python-api-errors-programmingerror">errors.ProgrammingError Exception</a></dt><dt>errors.Warning, <a class="indexterm" href="#connector-python-api-errors-warning">errors.Warning Exception</a></dt></dl></dd></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_F"></a>F</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id5469">function</dt><dd><dl><dt>errors.custom_error_exception(), <a class="indexterm" href="#connector-python-api-errors-custom-error-exception">errors.custom_error_exception() Function</a></dt></dl></dd></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_M"></a>M</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id3340">method</dt><dd><dl><dt>mysql.connector.connect(), <a class="indexterm" href="#connector-python-api-mysql-connector-connect">mysql.connector.connect() Method</a></dt><dt>MySQLConnection.close(), <a class="indexterm" href="#connector-python-api-mysqlconnection-close">MySQLConnection.close() Method</a></dt><dt>MySQLConnection.cmd_change_user(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-change-user">MySQLConnection.cmd_change_user() Method</a></dt><dt>MySQLConnection.cmd_debug(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-debug">MySQLConnection.cmd_debug() Method</a></dt><dt>MySQLConnection.cmd_init_db(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-init-db">MySQLConnection.cmd_init_db() Method</a></dt><dt>MySQLConnection.cmd_ping(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-ping">MySQLConnection.cmd_ping() Method</a></dt><dt>MySQLConnection.cmd_process_info(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-info">MySQLConnection.cmd_process_info() Method</a></dt><dt>MySQLConnection.cmd_process_kill(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-kill">MySQLConnection.cmd_process_kill() Method</a></dt><dt>MySQLConnection.cmd_query(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query">MySQLConnection.cmd_query() Method</a></dt><dt>MySQLConnection.cmd_query_iter(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query-iter">MySQLConnection.cmd_query_iter() Method</a></dt><dt>MySQLConnection.cmd_quit(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-quit">MySQLConnection.cmd_quit() Method</a></dt><dt>MySQLConnection.cmd_refresh(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-refresh">MySQLConnection.cmd_refresh() Method</a></dt><dt>MySQLConnection.cmd_reset_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-reset-connection">MySQLConnection.cmd_reset_connection() Method</a></dt><dt>MySQLConnection.cmd_shutdown(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-shutdown">MySQLConnection.cmd_shutdown() Method</a></dt><dt>MySQLConnection.cmd_statistics(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-statistics">MySQLConnection.cmd_statistics() Method</a></dt><dt>MySQLConnection.commit(), <a class="indexterm" href="#connector-python-api-mysqlconnection-commit">MySQLConnection.commit() Method</a></dt><dt>MySQLConnection.config(), <a class="indexterm" href="#connector-python-api-mysqlconnection-config">MySQLConnection.config() Method</a></dt><dt>MySQLConnection.connect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-connect">MySQLConnection.connect() Method</a></dt><dt>MySQLConnection.cursor(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cursor">MySQLConnection.cursor() Method</a></dt><dt>MySQLConnection.disconnect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-disconnect">MySQLConnection.disconnect() Method</a></dt><dt>MySQLConnection.get_row(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-row">MySQLConnection.get_row() Method</a></dt><dt>MySQLConnection.get_rows(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-rows">MySQLConnection.get_rows() Method</a></dt><dt>MySQLConnection.get_server_info(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-info">MySQLConnection.get_server_info() Method</a></dt><dt>MySQLConnection.get_server_version(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-version">MySQLConnection.get_server_version() Method</a></dt><dt>MySQLConnection.isset_client_flag(), <a class="indexterm" href="#connector-python-api-mysqlconnection-isset-client-flag">MySQLConnection.isset_client_flag() Method</a></dt><dt>MySQLConnection.is_connected(), <a class="indexterm" href="#connector-python-api-mysqlconnection-is-connected">MySQLConnection.is_connected() Method</a></dt><dt>MySQLConnection.ping(), <a class="indexterm" href="#connector-python-api-mysqlconnection-ping">MySQLConnection.ping() Method</a></dt><dt>MySQLConnection.reconnect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-reconnect">MySQLConnection.reconnect() Method</a></dt><dt>MySQLConnection.reset_session(), <a class="indexterm" href="#connector-python-api-mysqlconnection-reset-session">MySQLConnection.reset_session() Method</a></dt><dt>MySQLConnection.rollback(), <a class="indexterm" href="#connector-python-api-mysqlconnection-rollback">MySQLConnection.rollback() Method</a></dt><dt>MySQLConnection.set_charset_collation(), <a class="indexterm" href="#connector-python-api-mysqlconnection-set-charset-collation">MySQLConnection.set_charset_collation() Method</a></dt><dt>MySQLConnection.set_client_flags(), <a class="indexterm" href="#connector-python-api-mysqlconnection-set-client-flags">MySQLConnection.set_client_flags() Method</a></dt><dt>MySQLConnection.shutdown(), <a class="indexterm" href="#connector-python-api-mysqlconnection-shutdown">MySQLConnection.shutdown() Method</a></dt><dt>MySQLConnection.start_transaction(), <a class="indexterm" href="#connector-python-api-mysqlconnection-start-transaction">MySQLConnection.start_transaction() Method</a></dt><dt>MySQLConnectionPool.add_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-add-connection">MySQLConnectionPool.add_connection() Method</a></dt><dt>MySQLConnectionPool.get_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-get-connection">MySQLConnectionPool.get_connection() Method</a></dt><dt>MySQLConnectionPool.set_config(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-set-config">MySQLConnectionPool.set_config() Method</a></dt><dt>MySQLCursor.add_attribute(), <a class="indexterm" href="#connector-python-api-mysqlcursor-add-attribute">MySQLCursor.add_attribute() Method</a></dt><dt>MySQLCursor.callproc(), <a class="indexterm" href="#connector-python-api-mysqlcursor-callproc">MySQLCursor.callproc() Method</a></dt><dt>MySQLCursor.clear_attributes(), <a class="indexterm" href="#connector-python-api-mysqlcursor-clear-attributes">MySQLCursor.clear_attributes() Method</a></dt><dt>MySQLCursor.close(), <a class="indexterm" href="#connector-python-api-mysqlcursor-close">MySQLCursor.close() Method</a></dt><dt>MySQLCursor.execute(), <a class="indexterm" href="#connector-python-api-mysqlcursor-execute">MySQLCursor.execute() Method</a></dt><dt>MySQLCursor.executemany(), <a class="indexterm" href="#connector-python-api-mysqlcursor-executemany">MySQLCursor.executemany() Method</a></dt><dt>MySQLCursor.fetchall(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchall">MySQLCursor.fetchall() Method</a></dt><dt>MySQLCursor.fetchmany(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchmany">MySQLCursor.fetchmany() Method</a></dt><dt>MySQLCursor.fetchone(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchone">MySQLCursor.fetchone() Method</a></dt><dt>MySQLCursor.fetchsets(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchsets">MySQLCursor.fetchsets() Method</a></dt><dt>MySQLCursor.fetchwarnings(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchwarnings">MySQLCursor.fetchwarnings() Method</a></dt><dt>MySQLCursor.get_attributes(), <a class="indexterm" href="#connector-python-api-mysqlcursor-get-attributes">MySQLCursor.get_attributes() Method</a></dt><dt>MySQLCursor.nextset(), <a class="indexterm" href="#connector-python-api-mysqlcursor-nextset">MySQLCursor.nextset() Method</a></dt><dt>MySQLCursor.stored_results(), <a class="indexterm" href="#connector-python-api-mysqlcursor-stored-results">MySQLCursor.stored_results() Method</a></dt><dt>PooledMySQLConnection.close(), <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-close">PooledMySQLConnection.close() Method</a></dt><dt>PooledMySQLConnection.config(), <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-config">PooledMySQLConnection.config() Method</a></dt><dt>_mysql_connector.MySQL.affected_rows(), <a class="indexterm" href="#connector-python-api-cext-affected-rows">_mysql_connector.MySQL.affected_rows() Method</a></dt><dt>_mysql_connector.MySQL.autocommit(), <a class="indexterm" href="#connector-python-api-cext-autocommit">_mysql_connector.MySQL.autocommit() Method</a></dt><dt>_mysql_connector.MySQL.buffered(), <a class="indexterm" href="#connector-python-api-cext-buffered">_mysql_connector.MySQL.buffered() Method</a></dt><dt>_mysql_connector.MySQL.change_user(), <a class="indexterm" href="#connector-python-api-cext-change-user">_mysql_connector.MySQL.change_user() Method</a></dt><dt>_mysql_connector.MySQL.character_set_name(), <a class="indexterm" href="#connector-python-api-cext-character-set-name">_mysql_connector.MySQL.character_set_name() Method</a></dt><dt>_mysql_connector.MySQL.close(), <a class="indexterm" href="#connector-python-api-cext-close">_mysql_connector.MySQL.close() Method</a></dt><dt>_mysql_connector.MySQL.commit(), <a class="indexterm" href="#connector-python-api-cext-commit">_mysql_connector.MySQL.commit() Method</a></dt><dt>_mysql_connector.MySQL.connect(), <a class="indexterm" href="#connector-python-api-cext-connect">_mysql_connector.MySQL.connect() Method</a></dt><dt>_mysql_connector.MySQL.connected(), <a class="indexterm" href="#connector-python-api-cext-connected">_mysql_connector.MySQL.connected() Method</a></dt><dt>_mysql_connector.MySQL.consume_result(), <a class="indexterm" href="#connector-python-api-cext-consume-result">_mysql_connector.MySQL.consume_result() Method</a></dt><dt>_mysql_connector.MySQL.convert_to_mysql(), <a class="indexterm" href="#connector-python-api-cext-convert-to-mysql">_mysql_connector.MySQL.convert_to_mysql() Method</a></dt><dt>_mysql_connector.MySQL.escape_string(), <a class="indexterm" href="#connector-python-api-cext-escape-string">_mysql_connector.MySQL.escape_string() Method</a></dt><dt>_mysql_connector.MySQL.fetch_fields(), <a class="indexterm" href="#connector-python-api-cext-fetch-fields">_mysql_connector.MySQL.fetch_fields() Method</a></dt><dt>_mysql_connector.MySQL.fetch_row(), <a class="indexterm" href="#connector-python-api-cext-fetch-row">_mysql_connector.MySQL.fetch_row() Method</a></dt><dt>_mysql_connector.MySQL.field_count(), <a class="indexterm" href="#connector-python-api-cext-field-count">_mysql_connector.MySQL.field_count() Method</a></dt><dt>_mysql_connector.MySQL.free_result(), <a class="indexterm" href="#connector-python-api-cext-free-result">_mysql_connector.MySQL.free_result() Method</a></dt><dt>_mysql_connector.MySQL.get_character_set_info(), <a class="indexterm" href="#connector-python-api-cext-get-character-set-info">_mysql_connector.MySQL.get_character_set_info() Method</a></dt><dt>_mysql_connector.MySQL.get_client_info(), <a class="indexterm" href="#connector-python-api-cext-get-client-info">_mysql_connector.MySQL.get_client_info() Method</a></dt><dt>_mysql_connector.MySQL.get_client_version(), <a class="indexterm" href="#connector-python-api-cext-get-client-version">_mysql_connector.MySQL.get_client_version() Method</a></dt><dt>_mysql_connector.MySQL.get_host_info(), <a class="indexterm" href="#connector-python-api-cext-get-host-info">_mysql_connector.MySQL.get_host_info() Method</a></dt><dt>_mysql_connector.MySQL.get_proto_info(), <a class="indexterm" href="#connector-python-api-cext-get-proto-info">_mysql_connector.MySQL.get_proto_info() Method</a></dt><dt>_mysql_connector.MySQL.get_server_info(), <a class="indexterm" href="#connector-python-api-cext-get-server-info">_mysql_connector.MySQL.get_server_info() Method</a></dt><dt>_mysql_connector.MySQL.get_server_version(), <a class="indexterm" href="#connector-python-api-cext-get-server-version">_mysql_connector.MySQL.get_server_version() Method</a></dt><dt>_mysql_connector.MySQL.get_ssl_cipher(), <a class="indexterm" href="#connector-python-api-cext-get-ssl-cipher">_mysql_connector.MySQL.get_ssl_cipher() Method</a></dt><dt>_mysql_connector.MySQL.hex_string(), <a class="indexterm" href="#connector-python-api-cext-hex-string">_mysql_connector.MySQL.hex_string() Method</a></dt><dt>_mysql_connector.MySQL.insert_id(), <a class="indexterm" href="#connector-python-api-cext-insert-id">_mysql_connector.MySQL.insert_id() Method</a></dt><dt>_mysql_connector.MySQL.more_results(), <a class="indexterm" href="#connector-python-api-cext-more-results">_mysql_connector.MySQL.more_results() Method</a></dt><dt>_mysql_connector.MySQL.next_result(), <a class="indexterm" href="#connector-python-api-cext-next-result">_mysql_connector.MySQL.next_result() Method</a></dt><dt>_mysql_connector.MySQL.num_fields(), <a class="indexterm" href="#connector-python-api-cext-num-fields">_mysql_connector.MySQL.num_fields() Method</a></dt><dt>_mysql_connector.MySQL.num_rows(), <a class="indexterm" href="#connector-python-api-cext-num-rows">_mysql_connector.MySQL.num_rows() Method</a></dt><dt>_mysql_connector.MySQL.ping(), <a class="indexterm" href="#connector-python-api-cext-ping">_mysql_connector.MySQL.ping() Method</a></dt><dt>_mysql_connector.MySQL.query(), <a class="indexterm" href="#connector-python-api-cext-query">_mysql_connector.MySQL.query() Method</a></dt><dt>_mysql_connector.MySQL.raw(), <a class="indexterm" href="#connector-python-api-cext-raw">_mysql_connector.MySQL.raw() Method</a></dt><dt>_mysql_connector.MySQL.refresh(), <a class="indexterm" href="#connector-python-api-cext-refresh">_mysql_connector.MySQL.refresh() Method</a></dt><dt>_mysql_connector.MySQL.reset_connection(), <a class="indexterm" href="#connector-python-api-cext-reset-connection">_mysql_connector.MySQL.reset_connection() Method</a></dt><dt>_mysql_connector.MySQL.rollback(), <a class="indexterm" href="#connector-python-api-cext-rollback">_mysql_connector.MySQL.rollback() Method</a></dt><dt>_mysql_connector.MySQL.select_db(), <a class="indexterm" href="#connector-python-api-cext-select-db">_mysql_connector.MySQL.select_db() Method</a></dt><dt>_mysql_connector.MySQL.set_character_set(), <a class="indexterm" href="#connector-python-api-cext-set-character-set">_mysql_connector.MySQL.set_character_set() Method</a></dt><dt>_mysql_connector.MySQL.shutdown(), <a class="indexterm" href="#connector-python-api-cext-shutdown">_mysql_connector.MySQL.shutdown() Method</a></dt><dt>_mysql_connector.MySQL.stat(), <a class="indexterm" href="#connector-python-api-cext-stat">_mysql_connector.MySQL.stat() Method</a></dt><dt>_mysql_connector.MySQL.thread_id(), <a class="indexterm" href="#connector-python-api-cext-thread-id">_mysql_connector.MySQL.thread_id() Method</a></dt><dt>_mysql_connector.MySQL.use_unicode(), <a class="indexterm" href="#connector-python-api-cext-use-unicode">_mysql_connector.MySQL.use_unicode() Method</a></dt><dt>_mysql_connector.MySQL.warning_count(), <a class="indexterm" href="#connector-python-api-cext-warning-count">_mysql_connector.MySQL.warning_count() Method</a></dt></dl></dd><dt id="ientry-id3332">module</dt><dd><dl><dt>errorcode, <a class="indexterm" href="#connector-python-api-errorcode">errorcode Module</a></dt><dt>mysql.connector, <a class="indexterm" href="#connector-python-api-mysql-connector">mysql.connector Module</a></dt><dt>_mysql_connector, <a class="indexterm" href="#connector-python-api-cext-mysql-connector">_mysql_connector Module</a></dt></dl></dd><dt id="ientry-id3330">mysql.connector module, <a class="indexterm" href="#connector-python-api-mysql-connector">mysql.connector Module</a></dt><dt id="ientry-id3352">mysql.connector.apilevel property, <a class="indexterm" href="#connector-python-api-mysql-connector-apilevel">mysql.connector.apilevel Property</a></dt><dt id="ientry-id3338">mysql.connector.connect() method, <a class="indexterm" href="#connector-python-api-mysql-connector-connect">mysql.connector.connect() Method</a></dt><dt id="ientry-id3360">mysql.connector.paramstyle property, <a class="indexterm" href="#connector-python-api-mysql-connector-paramstyle">mysql.connector.paramstyle Property</a></dt><dt id="ientry-id3368">mysql.connector.threadsafety property, <a class="indexterm" href="#connector-python-api-mysql-connector-threadsafety">mysql.connector.threadsafety Property</a></dt><dt id="ientry-id3384">mysql.connector.__version_info__ property, <a class="indexterm" href="#connector-python-api-mysql-connector-version-info">mysql.connector.__version_info__ Property</a></dt><dt id="ientry-id3376">mysql.connector.__version__ property, <a class="indexterm" href="#connector-python-api-mysql-connector-version">mysql.connector.__version__ Property</a></dt><dt id="ientry-id3991">MySQLConnection.autocommit property, <a class="indexterm" href="#connector-python-api-mysqlconnection-autocommit">MySQLConnection.autocommit Property</a></dt><dt id="ientry-id4019">MySQLConnection.can_consume_results property, <a class="indexterm" href="#connector-python-api-mysqlconnection-can-consume-results">MySQLConnection.can_consume_results Property</a></dt><dt id="ientry-id4029">MySQLConnection.charset property, <a class="indexterm" href="#connector-python-api-mysqlconnection-charset">MySQLConnection.charset Property</a></dt><dt id="ientry-id4036">MySQLConnection.client_flags property, <a class="indexterm" href="#connector-python-api-mysqlconnection-client-flags">MySQLConnection.client_flags Property</a></dt><dt id="ientry-id3412">MySQLConnection.close() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-close">MySQLConnection.close() Method</a></dt><dt id="ientry-id3546">MySQLConnection.cmd_change_user() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-change-user">MySQLConnection.cmd_change_user() Method</a></dt><dt id="ientry-id3560">MySQLConnection.cmd_debug() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-debug">MySQLConnection.cmd_debug() Method</a></dt><dt id="ientry-id3570">MySQLConnection.cmd_init_db() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-init-db">MySQLConnection.cmd_init_db() Method</a></dt><dt id="ientry-id3580">MySQLConnection.cmd_ping() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-ping">MySQLConnection.cmd_ping() Method</a></dt><dt id="ientry-id3591">MySQLConnection.cmd_process_info() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-info">MySQLConnection.cmd_process_info() Method</a></dt><dt id="ientry-id3603">MySQLConnection.cmd_process_kill() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-kill">MySQLConnection.cmd_process_kill() Method</a></dt><dt id="ientry-id3620">MySQLConnection.cmd_query() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query">MySQLConnection.cmd_query() Method</a></dt><dt id="ientry-id3637">MySQLConnection.cmd_query_iter() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query-iter">MySQLConnection.cmd_query_iter() Method</a></dt><dt id="ientry-id3651">MySQLConnection.cmd_quit() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-quit">MySQLConnection.cmd_quit() Method</a></dt><dt id="ientry-id3659">MySQLConnection.cmd_refresh() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-refresh">MySQLConnection.cmd_refresh() Method</a></dt><dt id="ientry-id3679">MySQLConnection.cmd_reset_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-reset-connection">MySQLConnection.cmd_reset_connection() Method</a></dt><dt id="ientry-id3694">MySQLConnection.cmd_shutdown() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-shutdown">MySQLConnection.cmd_shutdown() Method</a></dt><dt id="ientry-id3706">MySQLConnection.cmd_statistics() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-statistics">MySQLConnection.cmd_statistics() Method</a></dt><dt id="ientry-id4054">MySQLConnection.collation property, <a class="indexterm" href="#connector-python-api-mysqlconnection-collation">MySQLConnection.collation Property</a></dt><dt id="ientry-id3427">MySQLConnection.commit() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-commit">MySQLConnection.commit() Method</a></dt><dt id="ientry-id3438">MySQLConnection.config() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-config">MySQLConnection.config() Method</a></dt><dt id="ientry-id3462">MySQLConnection.connect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-connect">MySQLConnection.connect() Method</a></dt><dt id="ientry-id4061">MySQLConnection.connected property, <a class="indexterm" href="#connector-python-api-mysqlconnection-connected">MySQLConnection.connected Property</a></dt><dt id="ientry-id4074">MySQLConnection.connection_id property, <a class="indexterm" href="#connector-python-api-mysqlconnection-connection-id">MySQLConnection.connection_id Property</a></dt><dt id="ientry-id4082">MySQLConnection.converter-class property, <a class="indexterm" href="#connector-python-api-mysqlconnection-converter-class">MySQLConnection.converter-class Property</a></dt><dt id="ientry-id3482">MySQLConnection.cursor() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cursor">MySQLConnection.cursor() Method</a></dt><dt id="ientry-id4090">MySQLConnection.database property, <a class="indexterm" href="#connector-python-api-mysqlconnection-database">MySQLConnection.database Property</a></dt><dt id="ientry-id3713">MySQLConnection.disconnect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-disconnect">MySQLConnection.disconnect() Method</a></dt><dt id="ientry-id3727">MySQLConnection.get_row() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-row">MySQLConnection.get_row() Method</a></dt><dt id="ientry-id3748">MySQLConnection.get_rows() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-rows">MySQLConnection.get_rows() Method</a></dt><dt id="ientry-id3773">MySQLConnection.get_server_info() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-info">MySQLConnection.get_server_info() Method</a></dt><dt id="ientry-id3786">MySQLConnection.get_server_version() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-version">MySQLConnection.get_server_version() Method</a></dt><dt id="ientry-id4100">MySQLConnection.get_warnings property, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-warnings">MySQLConnection.get_warnings Property</a></dt><dt id="ientry-id4116">MySQLConnection.in_transaction property, <a class="indexterm" href="#connector-python-api-mysqlconnection-in-transaction">MySQLConnection.in_transaction Property</a></dt><dt id="ientry-id3815">MySQLConnection.isset_client_flag() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-isset-client-flag">MySQLConnection.isset_client_flag() Method</a></dt><dt id="ientry-id3798">MySQLConnection.is_connected() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-is-connected">MySQLConnection.is_connected() Method</a></dt><dt id="ientry-id3826">MySQLConnection.ping() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-ping">MySQLConnection.ping() Method</a></dt><dt id="ientry-id4135">MySQLConnection.raise_on_warnings property, <a class="indexterm" href="#connector-python-api-mysqlconnection-raise-on-warnings">MySQLConnection.raise_on_warnings Property</a></dt><dt id="ientry-id3846">MySQLConnection.reconnect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-reconnect">MySQLConnection.reconnect() Method</a></dt><dt id="ientry-id3859">MySQLConnection.reset_session() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-reset-session">MySQLConnection.reset_session() Method</a></dt><dt id="ientry-id3876">MySQLConnection.rollback() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-rollback">MySQLConnection.rollback() Method</a></dt><dt id="ientry-id4156">MySQLConnection.server_host property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-host">MySQLConnection.server_host Property</a></dt><dt id="ientry-id4164">MySQLConnection.server_info property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-info">MySQLConnection.server_info Property</a></dt><dt id="ientry-id4173">MySQLConnection.server_port property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-port">MySQLConnection.server_port Property</a></dt><dt id="ientry-id4181">MySQLConnection.server_version property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-version">MySQLConnection.server_version Property</a></dt><dt id="ientry-id3889">MySQLConnection.set_charset_collation() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-set-charset-collation">MySQLConnection.set_charset_collation() Method</a></dt><dt id="ientry-id3910">MySQLConnection.set_client_flags() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-set-client-flags">MySQLConnection.set_client_flags() Method</a></dt><dt id="ientry-id3932">MySQLConnection.shutdown() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-shutdown">MySQLConnection.shutdown() Method</a></dt><dt id="ientry-id4189">MySQLConnection.sql_mode property, <a class="indexterm" href="#connector-python-api-mysqlconnection-sql-mode">MySQLConnection.sql_mode Property</a></dt><dt id="ientry-id3946">MySQLConnection.start_transaction() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-start-transaction">MySQLConnection.start_transaction() Method</a></dt><dt id="ientry-id4200">MySQLConnection.time_zone property, <a class="indexterm" href="#connector-python-api-mysqlconnection-time-zone">MySQLConnection.time_zone Property</a></dt><dt id="ientry-id4219">MySQLConnection.unix_socket property, <a class="indexterm" href="#connector-python-api-mysqlconnection-unix-socket">MySQLConnection.unix_socket Property</a></dt><dt id="ientry-id4009">MySQLConnection.unread_results property, <a class="indexterm" href="#connector-python-api-mysqlconnection-unread-results">MySQLConnection.unread_results Property</a></dt><dt id="ientry-id4227">MySQLConnection.user property, <a class="indexterm" href="#connector-python-api-mysqlconnection-user">MySQLConnection.user Property</a></dt><dt id="ientry-id4209">MySQLConnection.use_unicode property, <a class="indexterm" href="#connector-python-api-mysqlconnection-use-unicode">MySQLConnection.use_unicode Property</a></dt><dt id="ientry-id4275">MySQLConnectionPool.add_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-add-connection">MySQLConnectionPool.add_connection() Method</a></dt><dt id="ientry-id4294">MySQLConnectionPool.get_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-get-connection">MySQLConnectionPool.get_connection() Method</a></dt><dt id="ientry-id4323">MySQLConnectionPool.pool_name property, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-pool-name">MySQLConnectionPool.pool_name Property</a></dt><dt id="ientry-id4306">MySQLConnectionPool.set_config() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-set-config">MySQLConnectionPool.set_config() Method</a></dt><dt id="ientry-id4475">MySQLCursor.add_attribute() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-add-attribute">MySQLCursor.add_attribute() Method</a></dt><dt id="ientry-id4516">MySQLCursor.callproc() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-callproc">MySQLCursor.callproc() Method</a></dt><dt id="ientry-id4494">MySQLCursor.clear_attributes() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-clear-attributes">MySQLCursor.clear_attributes() Method</a></dt><dt id="ientry-id4543">MySQLCursor.close() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-close">MySQLCursor.close() Method</a></dt><dt id="ientry-id4723">MySQLCursor.column_names property, <a class="indexterm" href="#connector-python-api-mysqlcursor-column-names">MySQLCursor.column_names Property</a></dt><dt id="ientry-id4737">MySQLCursor.description property, <a class="indexterm" href="#connector-python-api-mysqlcursor-description">MySQLCursor.description Property</a></dt><dt id="ientry-id4553">MySQLCursor.execute() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-execute">MySQLCursor.execute() Method</a></dt><dt id="ientry-id4586">MySQLCursor.executemany() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-executemany">MySQLCursor.executemany() Method</a></dt><dt id="ientry-id4615">MySQLCursor.fetchall() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchall">MySQLCursor.fetchall() Method</a></dt><dt id="ientry-id4627">MySQLCursor.fetchmany() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchmany">MySQLCursor.fetchmany() Method</a></dt><dt id="ientry-id4639">MySQLCursor.fetchone() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchone">MySQLCursor.fetchone() Method</a></dt><dt id="ientry-id4673">MySQLCursor.fetchsets() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchsets">MySQLCursor.fetchsets() Method</a></dt><dt id="ientry-id4685">MySQLCursor.fetchwarnings() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchwarnings">MySQLCursor.fetchwarnings() Method</a></dt><dt id="ientry-id4505">MySQLCursor.get_attributes() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-get-attributes">MySQLCursor.get_attributes() Method</a></dt><dt id="ientry-id4774">MySQLCursor.lastrowid property, <a class="indexterm" href="#connector-python-api-mysqlcursor-lastrowid">MySQLCursor.lastrowid Property</a></dt><dt id="ientry-id4659">MySQLCursor.nextset() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-nextset">MySQLCursor.nextset() Method</a></dt><dt id="ientry-id4800">MySQLCursor.rowcount property, <a class="indexterm" href="#connector-python-api-mysqlcursor-rowcount">MySQLCursor.rowcount Property</a></dt><dt id="ientry-id4822">MySQLCursor.statement property, <a class="indexterm" href="#connector-python-api-mysqlcursor-statement">MySQLCursor.statement Property</a></dt><dt id="ientry-id4707">MySQLCursor.stored_results() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-stored-results">MySQLCursor.stored_results() Method</a></dt><dt id="ientry-id4756">MySQLCursor.warnings property, <a class="indexterm" href="#connector-python-api-mysqlcursor-warnings">MySQLCursor.warnings Property</a></dt><dt id="ientry-id4838">MySQLCursor.with_rows property, <a class="indexterm" href="#connector-python-api-mysqlcursor-with-rows">MySQLCursor.with_rows Property</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_P"></a>P</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id1569">PEP 249, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id4381">PooledMySQLConnection.close() method, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-close">PooledMySQLConnection.close() Method</a></dt><dt id="ientry-id4393">PooledMySQLConnection.config() method, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-config">PooledMySQLConnection.config() Method</a></dt><dt id="ientry-id4402">PooledMySQLConnection.pool_name property, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-pool-name">PooledMySQLConnection.pool_name Property</a></dt><dt id="ientry-id4235">pooling.MySQLConnectionPool class, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool">pooling.MySQLConnectionPool Class</a></dt><dt id="ientry-id4242">pooling.MySQLConnectionPool constructor, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-constructor">pooling.MySQLConnectionPool Constructor</a></dt><dt id="ientry-id4334">pooling.PooledMySQLConnection class, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection">pooling.PooledMySQLConnection Class</a></dt><dt id="ientry-id4359">pooling.PooledMySQLConnection constructor, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-constructor">pooling.PooledMySQLConnection Constructor</a></dt><dt id="ientry-id4955">prepared statements, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt id="ientry-id3354">property</dt><dd><dl><dt>mysql.connector.apilevel, <a class="indexterm" href="#connector-python-api-mysql-connector-apilevel">mysql.connector.apilevel Property</a></dt><dt>mysql.connector.paramstyle, <a class="indexterm" href="#connector-python-api-mysql-connector-paramstyle">mysql.connector.paramstyle Property</a></dt><dt>mysql.connector.threadsafety, <a class="indexterm" href="#connector-python-api-mysql-connector-threadsafety">mysql.connector.threadsafety Property</a></dt><dt>mysql.connector.__version_info__, <a class="indexterm" href="#connector-python-api-mysql-connector-version-info">mysql.connector.__version_info__ Property</a></dt><dt>mysql.connector.__version__, <a class="indexterm" href="#connector-python-api-mysql-connector-version">mysql.connector.__version__ Property</a></dt><dt>MySQLConnection.autocommit, <a class="indexterm" href="#connector-python-api-mysqlconnection-autocommit">MySQLConnection.autocommit Property</a></dt><dt>MySQLConnection.can_consume_results, <a class="indexterm" href="#connector-python-api-mysqlconnection-can-consume-results">MySQLConnection.can_consume_results Property</a></dt><dt>MySQLConnection.charset, <a class="indexterm" href="#connector-python-api-mysqlconnection-charset">MySQLConnection.charset Property</a></dt><dt>MySQLConnection.client_flags, <a class="indexterm" href="#connector-python-api-mysqlconnection-client-flags">MySQLConnection.client_flags Property</a></dt><dt>MySQLConnection.collation, <a class="indexterm" href="#connector-python-api-mysqlconnection-collation">MySQLConnection.collation Property</a></dt><dt>MySQLConnection.connected, <a class="indexterm" href="#connector-python-api-mysqlconnection-connected">MySQLConnection.connected Property</a></dt><dt>MySQLConnection.connection_id, <a class="indexterm" href="#connector-python-api-mysqlconnection-connection-id">MySQLConnection.connection_id Property</a></dt><dt>MySQLConnection.converter-class, <a class="indexterm" href="#connector-python-api-mysqlconnection-converter-class">MySQLConnection.converter-class Property</a></dt><dt>MySQLConnection.database, <a class="indexterm" href="#connector-python-api-mysqlconnection-database">MySQLConnection.database Property</a></dt><dt>MySQLConnection.get_warnings, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-warnings">MySQLConnection.get_warnings Property</a></dt><dt>MySQLConnection.in_transaction, <a class="indexterm" href="#connector-python-api-mysqlconnection-in-transaction">MySQLConnection.in_transaction Property</a></dt><dt>MySQLConnection.raise_on_warnings, <a class="indexterm" href="#connector-python-api-mysqlconnection-raise-on-warnings">MySQLConnection.raise_on_warnings Property</a></dt><dt>MySQLConnection.server_host, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-host">MySQLConnection.server_host Property</a></dt><dt>MySQLConnection.server_info, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-info">MySQLConnection.server_info Property</a></dt><dt>MySQLConnection.server_port, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-port">MySQLConnection.server_port Property</a></dt><dt>MySQLConnection.server_version, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-version">MySQLConnection.server_version Property</a></dt><dt>MySQLConnection.sql_mode, <a class="indexterm" href="#connector-python-api-mysqlconnection-sql-mode">MySQLConnection.sql_mode Property</a></dt><dt>MySQLConnection.time_zone, <a class="indexterm" href="#connector-python-api-mysqlconnection-time-zone">MySQLConnection.time_zone Property</a></dt><dt>MySQLConnection.unix_socket, <a class="indexterm" href="#connector-python-api-mysqlconnection-unix-socket">MySQLConnection.unix_socket Property</a></dt><dt>MySQLConnection.unread_results, <a class="indexterm" href="#connector-python-api-mysqlconnection-unread-results">MySQLConnection.unread_results Property</a></dt><dt>MySQLConnection.user, <a class="indexterm" href="#connector-python-api-mysqlconnection-user">MySQLConnection.user Property</a></dt><dt>MySQLConnection.use_unicode, <a class="indexterm" href="#connector-python-api-mysqlconnection-use-unicode">MySQLConnection.use_unicode Property</a></dt><dt>MySQLConnectionPool.pool_name, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-pool-name">MySQLConnectionPool.pool_name Property</a></dt><dt>MySQLCursor.column_names, <a class="indexterm" href="#connector-python-api-mysqlcursor-column-names">MySQLCursor.column_names Property</a></dt><dt>MySQLCursor.description, <a class="indexterm" href="#connector-python-api-mysqlcursor-description">MySQLCursor.description Property</a></dt><dt>MySQLCursor.lastrowid, <a class="indexterm" href="#connector-python-api-mysqlcursor-lastrowid">MySQLCursor.lastrowid Property</a></dt><dt>MySQLCursor.rowcount, <a class="indexterm" href="#connector-python-api-mysqlcursor-rowcount">MySQLCursor.rowcount Property</a></dt><dt>MySQLCursor.statement, <a class="indexterm" href="#connector-python-api-mysqlcursor-statement">MySQLCursor.statement Property</a></dt><dt>MySQLCursor.warnings, <a class="indexterm" href="#connector-python-api-mysqlcursor-warnings">MySQLCursor.warnings Property</a></dt><dt>MySQLCursor.with_rows, <a class="indexterm" href="#connector-python-api-mysqlcursor-with-rows">MySQLCursor.with_rows Property</a></dt><dt>PooledMySQLConnection.pool_name, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-pool-name">PooledMySQLConnection.pool_name Property</a></dt><dt>_mysql_connector.MySQL.have_result_set, <a class="indexterm" href="#connector-python-api-cext-have-result-set">_mysql_connector.MySQL.have_result_set Property</a></dt></dl></dd><dt id="ientry-id1573">Python, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id1567">Python Database API Specification v2.0 (PEP 249), <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_S"></a>S</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id4856">Subclasses cursor.mysqlcursor, <a class="indexterm" href="#connector-python-api-cursor-subclasses">Subclasses cursor.MySQLCursor</a></dt></dl></div></div></div></div><div class="copyright-footer"></div></body></html>
+</p><div class="indexdiv"><h3><a name="connector-python_index0_Symbols"></a>Symbols</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id5489">_mysql_connector module, <a class="indexterm" href="#connector-python-api-cext-mysql-connector">_mysql_connector Module</a></dt><dt id="ientry-id5497">_mysql_connector.MySQL() class, <a class="indexterm" href="#connector-python-api-cext-mysql">_mysql_connector.MySQL() Class</a></dt><dt id="ientry-id5526">_mysql_connector.MySQL.affected_rows() method, <a class="indexterm" href="#connector-python-api-cext-affected-rows">_mysql_connector.MySQL.affected_rows() Method</a></dt><dt id="ientry-id5541">_mysql_connector.MySQL.autocommit() method, <a class="indexterm" href="#connector-python-api-cext-autocommit">_mysql_connector.MySQL.autocommit() Method</a></dt><dt id="ientry-id5556">_mysql_connector.MySQL.buffered() method, <a class="indexterm" href="#connector-python-api-cext-buffered">_mysql_connector.MySQL.buffered() Method</a></dt><dt id="ientry-id5575">_mysql_connector.MySQL.change_user() method, <a class="indexterm" href="#connector-python-api-cext-change-user">_mysql_connector.MySQL.change_user() Method</a></dt><dt id="ientry-id5590">_mysql_connector.MySQL.character_set_name() method, <a class="indexterm" href="#connector-python-api-cext-character-set-name">_mysql_connector.MySQL.character_set_name() Method</a></dt><dt id="ientry-id5602">_mysql_connector.MySQL.close() method, <a class="indexterm" href="#connector-python-api-cext-close">_mysql_connector.MySQL.close() Method</a></dt><dt id="ientry-id5611">_mysql_connector.MySQL.commit() method, <a class="indexterm" href="#connector-python-api-cext-commit">_mysql_connector.MySQL.commit() Method</a></dt><dt id="ientry-id5620">_mysql_connector.MySQL.connect() method, <a class="indexterm" href="#connector-python-api-cext-connect">_mysql_connector.MySQL.connect() Method</a></dt><dt id="ientry-id5652">_mysql_connector.MySQL.connected() method, <a class="indexterm" href="#connector-python-api-cext-connected">_mysql_connector.MySQL.connected() Method</a></dt><dt id="ientry-id5664">_mysql_connector.MySQL.consume_result() method, <a class="indexterm" href="#connector-python-api-cext-consume-result">_mysql_connector.MySQL.consume_result() Method</a></dt><dt id="ientry-id5674">_mysql_connector.MySQL.convert_to_mysql() method, <a class="indexterm" href="#connector-python-api-cext-convert-to-mysql">_mysql_connector.MySQL.convert_to_mysql() Method</a></dt><dt id="ientry-id5687">_mysql_connector.MySQL.escape_string() method, <a class="indexterm" href="#connector-python-api-cext-escape-string">_mysql_connector.MySQL.escape_string() Method</a></dt><dt id="ientry-id5705">_mysql_connector.MySQL.fetch_fields() method, <a class="indexterm" href="#connector-python-api-cext-fetch-fields">_mysql_connector.MySQL.fetch_fields() Method</a></dt><dt id="ientry-id5717">_mysql_connector.MySQL.fetch_row() method, <a class="indexterm" href="#connector-python-api-cext-fetch-row">_mysql_connector.MySQL.fetch_row() Method</a></dt><dt id="ientry-id5730">_mysql_connector.MySQL.field_count() method, <a class="indexterm" href="#connector-python-api-cext-field-count">_mysql_connector.MySQL.field_count() Method</a></dt><dt id="ientry-id5739">_mysql_connector.MySQL.free_result() method, <a class="indexterm" href="#connector-python-api-cext-free-result">_mysql_connector.MySQL.free_result() Method</a></dt><dt id="ientry-id5749">_mysql_connector.MySQL.get_character_set_info() method, <a class="indexterm" href="#connector-python-api-cext-get-character-set-info">_mysql_connector.MySQL.get_character_set_info() Method</a></dt><dt id="ientry-id5765">_mysql_connector.MySQL.get_client_info() method, <a class="indexterm" href="#connector-python-api-cext-get-client-info">_mysql_connector.MySQL.get_client_info() Method</a></dt><dt id="ientry-id5774">_mysql_connector.MySQL.get_client_version() method, <a class="indexterm" href="#connector-python-api-cext-get-client-version">_mysql_connector.MySQL.get_client_version() Method</a></dt><dt id="ientry-id5783">_mysql_connector.MySQL.get_host_info() method, <a class="indexterm" href="#connector-python-api-cext-get-host-info">_mysql_connector.MySQL.get_host_info() Method</a></dt><dt id="ientry-id5792">_mysql_connector.MySQL.get_proto_info() method, <a class="indexterm" href="#connector-python-api-cext-get-proto-info">_mysql_connector.MySQL.get_proto_info() Method</a></dt><dt id="ientry-id5801">_mysql_connector.MySQL.get_server_info() method, <a class="indexterm" href="#connector-python-api-cext-get-server-info">_mysql_connector.MySQL.get_server_info() Method</a></dt><dt id="ientry-id5810">_mysql_connector.MySQL.get_server_version() method, <a class="indexterm" href="#connector-python-api-cext-get-server-version">_mysql_connector.MySQL.get_server_version() Method</a></dt><dt id="ientry-id5819">_mysql_connector.MySQL.get_ssl_cipher() method, <a class="indexterm" href="#connector-python-api-cext-get-ssl-cipher">_mysql_connector.MySQL.get_ssl_cipher() Method</a></dt><dt id="ientry-id6064">_mysql_connector.MySQL.have_result_set property, <a class="indexterm" href="#connector-python-api-cext-have-result-set">_mysql_connector.MySQL.have_result_set Property</a></dt><dt id="ientry-id5829">_mysql_connector.MySQL.hex_string() method, <a class="indexterm" href="#connector-python-api-cext-hex-string">_mysql_connector.MySQL.hex_string() Method</a></dt><dt id="ientry-id5842">_mysql_connector.MySQL.insert_id() method, <a class="indexterm" href="#connector-python-api-cext-insert-id">_mysql_connector.MySQL.insert_id() Method</a></dt><dt id="ientry-id5852">_mysql_connector.MySQL.more_results() method, <a class="indexterm" href="#connector-python-api-cext-more-results">_mysql_connector.MySQL.more_results() Method</a></dt><dt id="ientry-id5863">_mysql_connector.MySQL.next_result() method, <a class="indexterm" href="#connector-python-api-cext-next-result">_mysql_connector.MySQL.next_result() Method</a></dt><dt id="ientry-id5874">_mysql_connector.MySQL.num_fields() method, <a class="indexterm" href="#connector-python-api-cext-num-fields">_mysql_connector.MySQL.num_fields() Method</a></dt><dt id="ientry-id5883">_mysql_connector.MySQL.num_rows() method, <a class="indexterm" href="#connector-python-api-cext-num-rows">_mysql_connector.MySQL.num_rows() Method</a></dt><dt id="ientry-id5894">_mysql_connector.MySQL.ping() method, <a class="indexterm" href="#connector-python-api-cext-ping">_mysql_connector.MySQL.ping() Method</a></dt><dt id="ientry-id5905">_mysql_connector.MySQL.query() method, <a class="indexterm" href="#connector-python-api-cext-query">_mysql_connector.MySQL.query() Method</a></dt><dt id="ientry-id5935">_mysql_connector.MySQL.raw() method, <a class="indexterm" href="#connector-python-api-cext-raw">_mysql_connector.MySQL.raw() Method</a></dt><dt id="ientry-id5950">_mysql_connector.MySQL.refresh() method, <a class="indexterm" href="#connector-python-api-cext-refresh">_mysql_connector.MySQL.refresh() Method</a></dt><dt id="ientry-id5962">_mysql_connector.MySQL.reset_connection() method, <a class="indexterm" href="#connector-python-api-cext-reset-connection">_mysql_connector.MySQL.reset_connection() Method</a></dt><dt id="ientry-id5971">_mysql_connector.MySQL.rollback() method, <a class="indexterm" href="#connector-python-api-cext-rollback">_mysql_connector.MySQL.rollback() Method</a></dt><dt id="ientry-id5982">_mysql_connector.MySQL.select_db() method, <a class="indexterm" href="#connector-python-api-cext-select-db">_mysql_connector.MySQL.select_db() Method</a></dt><dt id="ientry-id5994">_mysql_connector.MySQL.set_character_set() method, <a class="indexterm" href="#connector-python-api-cext-set-character-set">_mysql_connector.MySQL.set_character_set() Method</a></dt><dt id="ientry-id6007">_mysql_connector.MySQL.shutdown() method, <a class="indexterm" href="#connector-python-api-cext-shutdown">_mysql_connector.MySQL.shutdown() Method</a></dt><dt id="ientry-id6020">_mysql_connector.MySQL.stat() method, <a class="indexterm" href="#connector-python-api-cext-stat">_mysql_connector.MySQL.stat() Method</a></dt><dt id="ientry-id6031">_mysql_connector.MySQL.thread_id() method, <a class="indexterm" href="#connector-python-api-cext-thread-id">_mysql_connector.MySQL.thread_id() Method</a></dt><dt id="ientry-id6040">_mysql_connector.MySQL.use_unicode() method, <a class="indexterm" href="#connector-python-api-cext-use-unicode">_mysql_connector.MySQL.use_unicode() Method</a></dt><dt id="ientry-id6055">_mysql_connector.MySQL.warning_count() method, <a class="indexterm" href="#connector-python-api-cext-warning-count">_mysql_connector.MySQL.warning_count() Method</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_C"></a>C</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id3380">class</dt><dd><dl><dt>connection.MySQLConnection, <a class="indexterm" href="#connector-python-api-mysqlconnection">connection.MySQLConnection Class</a></dt><dt>constants.CharacterSet, <a class="indexterm" href="#connector-python-api-characterset">constants.CharacterSet Class</a></dt><dt>constants.ClientFlag, <a class="indexterm" href="#connector-python-api-clientflag">constants.ClientFlag Class</a></dt><dt>constants.FieldType, <a class="indexterm" href="#connector-python-api-fieldtype">constants.FieldType Class</a></dt><dt>constants.RefreshOption, <a class="indexterm" href="#connector-python-api-refreshoption">constants.RefreshOption Class</a></dt><dt>constants.SQLMode, <a class="indexterm" href="#connector-python-api-sqlmode">constants.SQLMode Class</a></dt><dt>cursor.MySQLCursor, <a class="indexterm" href="#connector-python-api-mysqlcursor">cursor.MySQLCursor Class</a></dt><dt>cursor.MySQLCursorBuffered, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffered">cursor.MySQLCursorBuffered Class</a></dt><dt>cursor.MySQLCursorBufferedDict, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffereddict">cursor.MySQLCursorBufferedDict Class</a></dt><dt>cursor.MySQLCursorDict, <a class="indexterm" href="#connector-python-api-mysqlcursordict">cursor.MySQLCursorDict Class</a></dt><dt>cursor.MySQLCursorPrepared, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt>cursor.MySQLCursorRaw, <a class="indexterm" href="#connector-python-api-mysqlcursorraw">cursor.MySQLCursorRaw Class</a></dt><dt>pooling.MySQLConnectionPool, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool">pooling.MySQLConnectionPool Class</a></dt><dt>pooling.PooledMySQLConnection, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection">pooling.PooledMySQLConnection Class</a></dt><dt>_mysql_connector.MySQL(), <a class="indexterm" href="#connector-python-api-cext-mysql">_mysql_connector.MySQL() Class</a></dt></dl></dd><dt id="ientry-id5012">COM_STMT_SEND_LONG_DATA</dt><dd><dl><dt>prepared statements, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt></dl></dd><dt id="ientry-id3378">connection.MySQLConnection class, <a class="indexterm" href="#connector-python-api-mysqlconnection">connection.MySQLConnection Class</a></dt><dt id="ientry-id3386">connection.MySQLConnection() constructor, <a class="indexterm" href="#connector-python-api-mysqlconnection-constructor">connection.MySQLConnection() Constructor</a></dt><dt id="ientry-id1571">Connector/Python, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id5059">constants.CharacterSet class, <a class="indexterm" href="#connector-python-api-characterset">constants.CharacterSet Class</a></dt><dt id="ientry-id5020">constants.ClientFlag class, <a class="indexterm" href="#connector-python-api-clientflag">constants.ClientFlag Class</a></dt><dt id="ientry-id5036">constants.FieldType class, <a class="indexterm" href="#connector-python-api-fieldtype">constants.FieldType Class</a></dt><dt id="ientry-id5069">constants.RefreshOption class, <a class="indexterm" href="#connector-python-api-refreshoption">constants.RefreshOption Class</a></dt><dt id="ientry-id5047">constants.SQLMode class, <a class="indexterm" href="#connector-python-api-sqlmode">constants.SQLMode Class</a></dt><dt id="ientry-id3388">constructor</dt><dd><dl><dt>connection.MySQLConnection(), <a class="indexterm" href="#connector-python-api-mysqlconnection-constructor">connection.MySQLConnection() Constructor</a></dt><dt>cursor.MySQLCursor, <a class="indexterm" href="#connector-python-api-mysqlcursor-constructor">cursor.MySQLCursor Constructor</a></dt><dt>pooling.MySQLConnectionPool, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-constructor">pooling.MySQLConnectionPool Constructor</a></dt><dt>pooling.PooledMySQLConnection, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-constructor">pooling.PooledMySQLConnection Constructor</a></dt></dl></dd><dt id="ientry-id4844">cursor.mysqlcursor</dt><dd><dl><dt>Subclasses, <a class="indexterm" href="#connector-python-api-cursor-subclasses">Subclasses cursor.MySQLCursor</a></dt></dl></dd><dt id="ientry-id4399">cursor.MySQLCursor class, <a class="indexterm" href="#connector-python-api-mysqlcursor">cursor.MySQLCursor Class</a></dt><dt id="ientry-id4441">cursor.MySQLCursor constructor, <a class="indexterm" href="#connector-python-api-mysqlcursor-constructor">cursor.MySQLCursor Constructor</a></dt><dt id="ientry-id4851">cursor.MySQLCursorBuffered class, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffered">cursor.MySQLCursorBuffered Class</a></dt><dt id="ientry-id4918">cursor.MySQLCursorBufferedDict class, <a class="indexterm" href="#connector-python-api-mysqlcursorbuffereddict">cursor.MySQLCursorBufferedDict Class</a></dt><dt id="ientry-id4899">cursor.MySQLCursorDict class, <a class="indexterm" href="#connector-python-api-mysqlcursordict">cursor.MySQLCursorDict Class</a></dt><dt id="ientry-id4936">cursor.MySQLCursorPrepared class, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt id="ientry-id4879">cursor.MySQLCursorRaw class, <a class="indexterm" href="#connector-python-api-mysqlcursorraw">cursor.MySQLCursorRaw Class</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_D"></a>D</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id2948">DYLD_LIBRARY_PATH environment variable, <a class="indexterm" href="#connector-python-cext-development">Application Development with the Connector/Python C Extension</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_E"></a>E</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id2950">environment variable</dt><dd><dl><dt>DYLD_LIBRARY_PATH, <a class="indexterm" href="#connector-python-cext-development">Application Development with the Connector/Python C Extension</a></dt></dl></dd><dt id="ientry-id5295">errorcode module, <a class="indexterm" href="#connector-python-api-errorcode">errorcode Module</a></dt><dt id="ientry-id5453">errors.custom_error_exception() function, <a class="indexterm" href="#connector-python-api-errors-custom-error-exception">errors.custom_error_exception() Function</a></dt><dt id="ientry-id5357">errors.DatabaseError exception, <a class="indexterm" href="#connector-python-api-errors-databaseerror">errors.DatabaseError Exception</a></dt><dt id="ientry-id5345">errors.DataError exception, <a class="indexterm" href="#connector-python-api-errors-dataerror">errors.DataError Exception</a></dt><dt id="ientry-id5305">errors.Error exception, <a class="indexterm" href="#connector-python-api-errors-error">errors.Error Exception</a></dt><dt id="ientry-id5367">errors.IntegrityError exception, <a class="indexterm" href="#connector-python-api-errors-integrityerror">errors.IntegrityError Exception</a></dt><dt id="ientry-id5379">errors.InterfaceError exception, <a class="indexterm" href="#connector-python-api-errors-interfaceerror">errors.InterfaceError Exception</a></dt><dt id="ientry-id5389">errors.InternalError exception, <a class="indexterm" href="#connector-python-api-errors-internalerror">errors.InternalError Exception</a></dt><dt id="ientry-id5399">errors.NotSupportedError exception, <a class="indexterm" href="#connector-python-api-errors-notsupportederror">errors.NotSupportedError Exception</a></dt><dt id="ientry-id5409">errors.OperationalError exception, <a class="indexterm" href="#connector-python-api-errors-operationalerror">errors.OperationalError Exception</a></dt><dt id="ientry-id5419">errors.PoolError exception, <a class="indexterm" href="#connector-python-api-errors-poolerror">errors.PoolError Exception</a></dt><dt id="ientry-id5428">errors.ProgrammingError exception, <a class="indexterm" href="#connector-python-api-errors-programmingerror">errors.ProgrammingError Exception</a></dt><dt id="ientry-id5440">errors.Warning exception, <a class="indexterm" href="#connector-python-api-errors-warning">errors.Warning Exception</a></dt><dt id="ientry-id5307">exception</dt><dd><dl><dt>errors.DatabaseError, <a class="indexterm" href="#connector-python-api-errors-databaseerror">errors.DatabaseError Exception</a></dt><dt>errors.DataError, <a class="indexterm" href="#connector-python-api-errors-dataerror">errors.DataError Exception</a></dt><dt>errors.Error, <a class="indexterm" href="#connector-python-api-errors-error">errors.Error Exception</a></dt><dt>errors.IntegrityError, <a class="indexterm" href="#connector-python-api-errors-integrityerror">errors.IntegrityError Exception</a></dt><dt>errors.InterfaceError, <a class="indexterm" href="#connector-python-api-errors-interfaceerror">errors.InterfaceError Exception</a></dt><dt>errors.InternalError, <a class="indexterm" href="#connector-python-api-errors-internalerror">errors.InternalError Exception</a></dt><dt>errors.NotSupportedError, <a class="indexterm" href="#connector-python-api-errors-notsupportederror">errors.NotSupportedError Exception</a></dt><dt>errors.OperationalError, <a class="indexterm" href="#connector-python-api-errors-operationalerror">errors.OperationalError Exception</a></dt><dt>errors.PoolError, <a class="indexterm" href="#connector-python-api-errors-poolerror">errors.PoolError Exception</a></dt><dt>errors.ProgrammingError, <a class="indexterm" href="#connector-python-api-errors-programmingerror">errors.ProgrammingError Exception</a></dt><dt>errors.Warning, <a class="indexterm" href="#connector-python-api-errors-warning">errors.Warning Exception</a></dt></dl></dd></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_F"></a>F</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id5455">function</dt><dd><dl><dt>errors.custom_error_exception(), <a class="indexterm" href="#connector-python-api-errors-custom-error-exception">errors.custom_error_exception() Function</a></dt></dl></dd></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_M"></a>M</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id3326">method</dt><dd><dl><dt>mysql.connector.connect(), <a class="indexterm" href="#connector-python-api-mysql-connector-connect">mysql.connector.connect() Method</a></dt><dt>MySQLConnection.close(), <a class="indexterm" href="#connector-python-api-mysqlconnection-close">MySQLConnection.close() Method</a></dt><dt>MySQLConnection.cmd_change_user(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-change-user">MySQLConnection.cmd_change_user() Method</a></dt><dt>MySQLConnection.cmd_debug(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-debug">MySQLConnection.cmd_debug() Method</a></dt><dt>MySQLConnection.cmd_init_db(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-init-db">MySQLConnection.cmd_init_db() Method</a></dt><dt>MySQLConnection.cmd_ping(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-ping">MySQLConnection.cmd_ping() Method</a></dt><dt>MySQLConnection.cmd_process_info(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-info">MySQLConnection.cmd_process_info() Method</a></dt><dt>MySQLConnection.cmd_process_kill(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-kill">MySQLConnection.cmd_process_kill() Method</a></dt><dt>MySQLConnection.cmd_query(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query">MySQLConnection.cmd_query() Method</a></dt><dt>MySQLConnection.cmd_query_iter(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query-iter">MySQLConnection.cmd_query_iter() Method</a></dt><dt>MySQLConnection.cmd_quit(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-quit">MySQLConnection.cmd_quit() Method</a></dt><dt>MySQLConnection.cmd_refresh(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-refresh">MySQLConnection.cmd_refresh() Method</a></dt><dt>MySQLConnection.cmd_reset_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-reset-connection">MySQLConnection.cmd_reset_connection() Method</a></dt><dt>MySQLConnection.cmd_shutdown(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-shutdown">MySQLConnection.cmd_shutdown() Method</a></dt><dt>MySQLConnection.cmd_statistics(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-statistics">MySQLConnection.cmd_statistics() Method</a></dt><dt>MySQLConnection.commit(), <a class="indexterm" href="#connector-python-api-mysqlconnection-commit">MySQLConnection.commit() Method</a></dt><dt>MySQLConnection.config(), <a class="indexterm" href="#connector-python-api-mysqlconnection-config">MySQLConnection.config() Method</a></dt><dt>MySQLConnection.connect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-connect">MySQLConnection.connect() Method</a></dt><dt>MySQLConnection.cursor(), <a class="indexterm" href="#connector-python-api-mysqlconnection-cursor">MySQLConnection.cursor() Method</a></dt><dt>MySQLConnection.disconnect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-disconnect">MySQLConnection.disconnect() Method</a></dt><dt>MySQLConnection.get_row(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-row">MySQLConnection.get_row() Method</a></dt><dt>MySQLConnection.get_rows(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-rows">MySQLConnection.get_rows() Method</a></dt><dt>MySQLConnection.get_server_info(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-info">MySQLConnection.get_server_info() Method</a></dt><dt>MySQLConnection.get_server_version(), <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-version">MySQLConnection.get_server_version() Method</a></dt><dt>MySQLConnection.isset_client_flag(), <a class="indexterm" href="#connector-python-api-mysqlconnection-isset-client-flag">MySQLConnection.isset_client_flag() Method</a></dt><dt>MySQLConnection.is_connected(), <a class="indexterm" href="#connector-python-api-mysqlconnection-is-connected">MySQLConnection.is_connected() Method</a></dt><dt>MySQLConnection.ping(), <a class="indexterm" href="#connector-python-api-mysqlconnection-ping">MySQLConnection.ping() Method</a></dt><dt>MySQLConnection.reconnect(), <a class="indexterm" href="#connector-python-api-mysqlconnection-reconnect">MySQLConnection.reconnect() Method</a></dt><dt>MySQLConnection.reset_session(), <a class="indexterm" href="#connector-python-api-mysqlconnection-reset-session">MySQLConnection.reset_session() Method</a></dt><dt>MySQLConnection.rollback(), <a class="indexterm" href="#connector-python-api-mysqlconnection-rollback">MySQLConnection.rollback() Method</a></dt><dt>MySQLConnection.set_charset_collation(), <a class="indexterm" href="#connector-python-api-mysqlconnection-set-charset-collation">MySQLConnection.set_charset_collation() Method</a></dt><dt>MySQLConnection.set_client_flags(), <a class="indexterm" href="#connector-python-api-mysqlconnection-set-client-flags">MySQLConnection.set_client_flags() Method</a></dt><dt>MySQLConnection.shutdown(), <a class="indexterm" href="#connector-python-api-mysqlconnection-shutdown">MySQLConnection.shutdown() Method</a></dt><dt>MySQLConnection.start_transaction(), <a class="indexterm" href="#connector-python-api-mysqlconnection-start-transaction">MySQLConnection.start_transaction() Method</a></dt><dt>MySQLConnectionPool.add_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-add-connection">MySQLConnectionPool.add_connection() Method</a></dt><dt>MySQLConnectionPool.get_connection(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-get-connection">MySQLConnectionPool.get_connection() Method</a></dt><dt>MySQLConnectionPool.set_config(), <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-set-config">MySQLConnectionPool.set_config() Method</a></dt><dt>MySQLCursor.add_attribute(), <a class="indexterm" href="#connector-python-api-mysqlcursor-add-attribute">MySQLCursor.add_attribute() Method</a></dt><dt>MySQLCursor.callproc(), <a class="indexterm" href="#connector-python-api-mysqlcursor-callproc">MySQLCursor.callproc() Method</a></dt><dt>MySQLCursor.clear_attributes(), <a class="indexterm" href="#connector-python-api-mysqlcursor-clear-attributes">MySQLCursor.clear_attributes() Method</a></dt><dt>MySQLCursor.close(), <a class="indexterm" href="#connector-python-api-mysqlcursor-close">MySQLCursor.close() Method</a></dt><dt>MySQLCursor.execute(), <a class="indexterm" href="#connector-python-api-mysqlcursor-execute">MySQLCursor.execute() Method</a></dt><dt>MySQLCursor.executemany(), <a class="indexterm" href="#connector-python-api-mysqlcursor-executemany">MySQLCursor.executemany() Method</a></dt><dt>MySQLCursor.fetchall(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchall">MySQLCursor.fetchall() Method</a></dt><dt>MySQLCursor.fetchmany(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchmany">MySQLCursor.fetchmany() Method</a></dt><dt>MySQLCursor.fetchone(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchone">MySQLCursor.fetchone() Method</a></dt><dt>MySQLCursor.fetchsets(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchsets">MySQLCursor.fetchsets() Method</a></dt><dt>MySQLCursor.fetchwarnings(), <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchwarnings">MySQLCursor.fetchwarnings() Method</a></dt><dt>MySQLCursor.get_attributes(), <a class="indexterm" href="#connector-python-api-mysqlcursor-get-attributes">MySQLCursor.get_attributes() Method</a></dt><dt>MySQLCursor.nextset(), <a class="indexterm" href="#connector-python-api-mysqlcursor-nextset">MySQLCursor.nextset() Method</a></dt><dt>MySQLCursor.stored_results(), <a class="indexterm" href="#connector-python-api-mysqlcursor-stored-results">MySQLCursor.stored_results() Method</a></dt><dt>PooledMySQLConnection.close(), <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-close">PooledMySQLConnection.close() Method</a></dt><dt>PooledMySQLConnection.config(), <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-config">PooledMySQLConnection.config() Method</a></dt><dt>_mysql_connector.MySQL.affected_rows(), <a class="indexterm" href="#connector-python-api-cext-affected-rows">_mysql_connector.MySQL.affected_rows() Method</a></dt><dt>_mysql_connector.MySQL.autocommit(), <a class="indexterm" href="#connector-python-api-cext-autocommit">_mysql_connector.MySQL.autocommit() Method</a></dt><dt>_mysql_connector.MySQL.buffered(), <a class="indexterm" href="#connector-python-api-cext-buffered">_mysql_connector.MySQL.buffered() Method</a></dt><dt>_mysql_connector.MySQL.change_user(), <a class="indexterm" href="#connector-python-api-cext-change-user">_mysql_connector.MySQL.change_user() Method</a></dt><dt>_mysql_connector.MySQL.character_set_name(), <a class="indexterm" href="#connector-python-api-cext-character-set-name">_mysql_connector.MySQL.character_set_name() Method</a></dt><dt>_mysql_connector.MySQL.close(), <a class="indexterm" href="#connector-python-api-cext-close">_mysql_connector.MySQL.close() Method</a></dt><dt>_mysql_connector.MySQL.commit(), <a class="indexterm" href="#connector-python-api-cext-commit">_mysql_connector.MySQL.commit() Method</a></dt><dt>_mysql_connector.MySQL.connect(), <a class="indexterm" href="#connector-python-api-cext-connect">_mysql_connector.MySQL.connect() Method</a></dt><dt>_mysql_connector.MySQL.connected(), <a class="indexterm" href="#connector-python-api-cext-connected">_mysql_connector.MySQL.connected() Method</a></dt><dt>_mysql_connector.MySQL.consume_result(), <a class="indexterm" href="#connector-python-api-cext-consume-result">_mysql_connector.MySQL.consume_result() Method</a></dt><dt>_mysql_connector.MySQL.convert_to_mysql(), <a class="indexterm" href="#connector-python-api-cext-convert-to-mysql">_mysql_connector.MySQL.convert_to_mysql() Method</a></dt><dt>_mysql_connector.MySQL.escape_string(), <a class="indexterm" href="#connector-python-api-cext-escape-string">_mysql_connector.MySQL.escape_string() Method</a></dt><dt>_mysql_connector.MySQL.fetch_fields(), <a class="indexterm" href="#connector-python-api-cext-fetch-fields">_mysql_connector.MySQL.fetch_fields() Method</a></dt><dt>_mysql_connector.MySQL.fetch_row(), <a class="indexterm" href="#connector-python-api-cext-fetch-row">_mysql_connector.MySQL.fetch_row() Method</a></dt><dt>_mysql_connector.MySQL.field_count(), <a class="indexterm" href="#connector-python-api-cext-field-count">_mysql_connector.MySQL.field_count() Method</a></dt><dt>_mysql_connector.MySQL.free_result(), <a class="indexterm" href="#connector-python-api-cext-free-result">_mysql_connector.MySQL.free_result() Method</a></dt><dt>_mysql_connector.MySQL.get_character_set_info(), <a class="indexterm" href="#connector-python-api-cext-get-character-set-info">_mysql_connector.MySQL.get_character_set_info() Method</a></dt><dt>_mysql_connector.MySQL.get_client_info(), <a class="indexterm" href="#connector-python-api-cext-get-client-info">_mysql_connector.MySQL.get_client_info() Method</a></dt><dt>_mysql_connector.MySQL.get_client_version(), <a class="indexterm" href="#connector-python-api-cext-get-client-version">_mysql_connector.MySQL.get_client_version() Method</a></dt><dt>_mysql_connector.MySQL.get_host_info(), <a class="indexterm" href="#connector-python-api-cext-get-host-info">_mysql_connector.MySQL.get_host_info() Method</a></dt><dt>_mysql_connector.MySQL.get_proto_info(), <a class="indexterm" href="#connector-python-api-cext-get-proto-info">_mysql_connector.MySQL.get_proto_info() Method</a></dt><dt>_mysql_connector.MySQL.get_server_info(), <a class="indexterm" href="#connector-python-api-cext-get-server-info">_mysql_connector.MySQL.get_server_info() Method</a></dt><dt>_mysql_connector.MySQL.get_server_version(), <a class="indexterm" href="#connector-python-api-cext-get-server-version">_mysql_connector.MySQL.get_server_version() Method</a></dt><dt>_mysql_connector.MySQL.get_ssl_cipher(), <a class="indexterm" href="#connector-python-api-cext-get-ssl-cipher">_mysql_connector.MySQL.get_ssl_cipher() Method</a></dt><dt>_mysql_connector.MySQL.hex_string(), <a class="indexterm" href="#connector-python-api-cext-hex-string">_mysql_connector.MySQL.hex_string() Method</a></dt><dt>_mysql_connector.MySQL.insert_id(), <a class="indexterm" href="#connector-python-api-cext-insert-id">_mysql_connector.MySQL.insert_id() Method</a></dt><dt>_mysql_connector.MySQL.more_results(), <a class="indexterm" href="#connector-python-api-cext-more-results">_mysql_connector.MySQL.more_results() Method</a></dt><dt>_mysql_connector.MySQL.next_result(), <a class="indexterm" href="#connector-python-api-cext-next-result">_mysql_connector.MySQL.next_result() Method</a></dt><dt>_mysql_connector.MySQL.num_fields(), <a class="indexterm" href="#connector-python-api-cext-num-fields">_mysql_connector.MySQL.num_fields() Method</a></dt><dt>_mysql_connector.MySQL.num_rows(), <a class="indexterm" href="#connector-python-api-cext-num-rows">_mysql_connector.MySQL.num_rows() Method</a></dt><dt>_mysql_connector.MySQL.ping(), <a class="indexterm" href="#connector-python-api-cext-ping">_mysql_connector.MySQL.ping() Method</a></dt><dt>_mysql_connector.MySQL.query(), <a class="indexterm" href="#connector-python-api-cext-query">_mysql_connector.MySQL.query() Method</a></dt><dt>_mysql_connector.MySQL.raw(), <a class="indexterm" href="#connector-python-api-cext-raw">_mysql_connector.MySQL.raw() Method</a></dt><dt>_mysql_connector.MySQL.refresh(), <a class="indexterm" href="#connector-python-api-cext-refresh">_mysql_connector.MySQL.refresh() Method</a></dt><dt>_mysql_connector.MySQL.reset_connection(), <a class="indexterm" href="#connector-python-api-cext-reset-connection">_mysql_connector.MySQL.reset_connection() Method</a></dt><dt>_mysql_connector.MySQL.rollback(), <a class="indexterm" href="#connector-python-api-cext-rollback">_mysql_connector.MySQL.rollback() Method</a></dt><dt>_mysql_connector.MySQL.select_db(), <a class="indexterm" href="#connector-python-api-cext-select-db">_mysql_connector.MySQL.select_db() Method</a></dt><dt>_mysql_connector.MySQL.set_character_set(), <a class="indexterm" href="#connector-python-api-cext-set-character-set">_mysql_connector.MySQL.set_character_set() Method</a></dt><dt>_mysql_connector.MySQL.shutdown(), <a class="indexterm" href="#connector-python-api-cext-shutdown">_mysql_connector.MySQL.shutdown() Method</a></dt><dt>_mysql_connector.MySQL.stat(), <a class="indexterm" href="#connector-python-api-cext-stat">_mysql_connector.MySQL.stat() Method</a></dt><dt>_mysql_connector.MySQL.thread_id(), <a class="indexterm" href="#connector-python-api-cext-thread-id">_mysql_connector.MySQL.thread_id() Method</a></dt><dt>_mysql_connector.MySQL.use_unicode(), <a class="indexterm" href="#connector-python-api-cext-use-unicode">_mysql_connector.MySQL.use_unicode() Method</a></dt><dt>_mysql_connector.MySQL.warning_count(), <a class="indexterm" href="#connector-python-api-cext-warning-count">_mysql_connector.MySQL.warning_count() Method</a></dt></dl></dd><dt id="ientry-id3318">module</dt><dd><dl><dt>errorcode, <a class="indexterm" href="#connector-python-api-errorcode">errorcode Module</a></dt><dt>mysql.connector, <a class="indexterm" href="#connector-python-api-mysql-connector">mysql.connector Module</a></dt><dt>_mysql_connector, <a class="indexterm" href="#connector-python-api-cext-mysql-connector">_mysql_connector Module</a></dt></dl></dd><dt id="ientry-id3316">mysql.connector module, <a class="indexterm" href="#connector-python-api-mysql-connector">mysql.connector Module</a></dt><dt id="ientry-id3338">mysql.connector.apilevel property, <a class="indexterm" href="#connector-python-api-mysql-connector-apilevel">mysql.connector.apilevel Property</a></dt><dt id="ientry-id3324">mysql.connector.connect() method, <a class="indexterm" href="#connector-python-api-mysql-connector-connect">mysql.connector.connect() Method</a></dt><dt id="ientry-id3346">mysql.connector.paramstyle property, <a class="indexterm" href="#connector-python-api-mysql-connector-paramstyle">mysql.connector.paramstyle Property</a></dt><dt id="ientry-id3354">mysql.connector.threadsafety property, <a class="indexterm" href="#connector-python-api-mysql-connector-threadsafety">mysql.connector.threadsafety Property</a></dt><dt id="ientry-id3370">mysql.connector.__version_info__ property, <a class="indexterm" href="#connector-python-api-mysql-connector-version-info">mysql.connector.__version_info__ Property</a></dt><dt id="ientry-id3362">mysql.connector.__version__ property, <a class="indexterm" href="#connector-python-api-mysql-connector-version">mysql.connector.__version__ Property</a></dt><dt id="ientry-id3977">MySQLConnection.autocommit property, <a class="indexterm" href="#connector-python-api-mysqlconnection-autocommit">MySQLConnection.autocommit Property</a></dt><dt id="ientry-id4005">MySQLConnection.can_consume_results property, <a class="indexterm" href="#connector-python-api-mysqlconnection-can-consume-results">MySQLConnection.can_consume_results Property</a></dt><dt id="ientry-id4015">MySQLConnection.charset property, <a class="indexterm" href="#connector-python-api-mysqlconnection-charset">MySQLConnection.charset Property</a></dt><dt id="ientry-id4022">MySQLConnection.client_flags property, <a class="indexterm" href="#connector-python-api-mysqlconnection-client-flags">MySQLConnection.client_flags Property</a></dt><dt id="ientry-id3398">MySQLConnection.close() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-close">MySQLConnection.close() Method</a></dt><dt id="ientry-id3532">MySQLConnection.cmd_change_user() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-change-user">MySQLConnection.cmd_change_user() Method</a></dt><dt id="ientry-id3546">MySQLConnection.cmd_debug() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-debug">MySQLConnection.cmd_debug() Method</a></dt><dt id="ientry-id3556">MySQLConnection.cmd_init_db() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-init-db">MySQLConnection.cmd_init_db() Method</a></dt><dt id="ientry-id3566">MySQLConnection.cmd_ping() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-ping">MySQLConnection.cmd_ping() Method</a></dt><dt id="ientry-id3577">MySQLConnection.cmd_process_info() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-info">MySQLConnection.cmd_process_info() Method</a></dt><dt id="ientry-id3589">MySQLConnection.cmd_process_kill() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-process-kill">MySQLConnection.cmd_process_kill() Method</a></dt><dt id="ientry-id3606">MySQLConnection.cmd_query() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query">MySQLConnection.cmd_query() Method</a></dt><dt id="ientry-id3623">MySQLConnection.cmd_query_iter() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-query-iter">MySQLConnection.cmd_query_iter() Method</a></dt><dt id="ientry-id3637">MySQLConnection.cmd_quit() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-quit">MySQLConnection.cmd_quit() Method</a></dt><dt id="ientry-id3645">MySQLConnection.cmd_refresh() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-refresh">MySQLConnection.cmd_refresh() Method</a></dt><dt id="ientry-id3665">MySQLConnection.cmd_reset_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-reset-connection">MySQLConnection.cmd_reset_connection() Method</a></dt><dt id="ientry-id3680">MySQLConnection.cmd_shutdown() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-shutdown">MySQLConnection.cmd_shutdown() Method</a></dt><dt id="ientry-id3692">MySQLConnection.cmd_statistics() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cmd-statistics">MySQLConnection.cmd_statistics() Method</a></dt><dt id="ientry-id4040">MySQLConnection.collation property, <a class="indexterm" href="#connector-python-api-mysqlconnection-collation">MySQLConnection.collation Property</a></dt><dt id="ientry-id3413">MySQLConnection.commit() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-commit">MySQLConnection.commit() Method</a></dt><dt id="ientry-id3424">MySQLConnection.config() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-config">MySQLConnection.config() Method</a></dt><dt id="ientry-id3448">MySQLConnection.connect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-connect">MySQLConnection.connect() Method</a></dt><dt id="ientry-id4047">MySQLConnection.connected property, <a class="indexterm" href="#connector-python-api-mysqlconnection-connected">MySQLConnection.connected Property</a></dt><dt id="ientry-id4060">MySQLConnection.connection_id property, <a class="indexterm" href="#connector-python-api-mysqlconnection-connection-id">MySQLConnection.connection_id Property</a></dt><dt id="ientry-id4068">MySQLConnection.converter-class property, <a class="indexterm" href="#connector-python-api-mysqlconnection-converter-class">MySQLConnection.converter-class Property</a></dt><dt id="ientry-id3468">MySQLConnection.cursor() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-cursor">MySQLConnection.cursor() Method</a></dt><dt id="ientry-id4076">MySQLConnection.database property, <a class="indexterm" href="#connector-python-api-mysqlconnection-database">MySQLConnection.database Property</a></dt><dt id="ientry-id3699">MySQLConnection.disconnect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-disconnect">MySQLConnection.disconnect() Method</a></dt><dt id="ientry-id3713">MySQLConnection.get_row() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-row">MySQLConnection.get_row() Method</a></dt><dt id="ientry-id3734">MySQLConnection.get_rows() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-rows">MySQLConnection.get_rows() Method</a></dt><dt id="ientry-id3759">MySQLConnection.get_server_info() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-info">MySQLConnection.get_server_info() Method</a></dt><dt id="ientry-id3772">MySQLConnection.get_server_version() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-server-version">MySQLConnection.get_server_version() Method</a></dt><dt id="ientry-id4086">MySQLConnection.get_warnings property, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-warnings">MySQLConnection.get_warnings Property</a></dt><dt id="ientry-id4102">MySQLConnection.in_transaction property, <a class="indexterm" href="#connector-python-api-mysqlconnection-in-transaction">MySQLConnection.in_transaction Property</a></dt><dt id="ientry-id3801">MySQLConnection.isset_client_flag() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-isset-client-flag">MySQLConnection.isset_client_flag() Method</a></dt><dt id="ientry-id3784">MySQLConnection.is_connected() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-is-connected">MySQLConnection.is_connected() Method</a></dt><dt id="ientry-id3812">MySQLConnection.ping() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-ping">MySQLConnection.ping() Method</a></dt><dt id="ientry-id4121">MySQLConnection.raise_on_warnings property, <a class="indexterm" href="#connector-python-api-mysqlconnection-raise-on-warnings">MySQLConnection.raise_on_warnings Property</a></dt><dt id="ientry-id3832">MySQLConnection.reconnect() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-reconnect">MySQLConnection.reconnect() Method</a></dt><dt id="ientry-id3845">MySQLConnection.reset_session() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-reset-session">MySQLConnection.reset_session() Method</a></dt><dt id="ientry-id3862">MySQLConnection.rollback() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-rollback">MySQLConnection.rollback() Method</a></dt><dt id="ientry-id4142">MySQLConnection.server_host property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-host">MySQLConnection.server_host Property</a></dt><dt id="ientry-id4150">MySQLConnection.server_info property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-info">MySQLConnection.server_info Property</a></dt><dt id="ientry-id4159">MySQLConnection.server_port property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-port">MySQLConnection.server_port Property</a></dt><dt id="ientry-id4167">MySQLConnection.server_version property, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-version">MySQLConnection.server_version Property</a></dt><dt id="ientry-id3875">MySQLConnection.set_charset_collation() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-set-charset-collation">MySQLConnection.set_charset_collation() Method</a></dt><dt id="ientry-id3896">MySQLConnection.set_client_flags() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-set-client-flags">MySQLConnection.set_client_flags() Method</a></dt><dt id="ientry-id3918">MySQLConnection.shutdown() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-shutdown">MySQLConnection.shutdown() Method</a></dt><dt id="ientry-id4175">MySQLConnection.sql_mode property, <a class="indexterm" href="#connector-python-api-mysqlconnection-sql-mode">MySQLConnection.sql_mode Property</a></dt><dt id="ientry-id3932">MySQLConnection.start_transaction() method, <a class="indexterm" href="#connector-python-api-mysqlconnection-start-transaction">MySQLConnection.start_transaction() Method</a></dt><dt id="ientry-id4186">MySQLConnection.time_zone property, <a class="indexterm" href="#connector-python-api-mysqlconnection-time-zone">MySQLConnection.time_zone Property</a></dt><dt id="ientry-id4205">MySQLConnection.unix_socket property, <a class="indexterm" href="#connector-python-api-mysqlconnection-unix-socket">MySQLConnection.unix_socket Property</a></dt><dt id="ientry-id3995">MySQLConnection.unread_results property, <a class="indexterm" href="#connector-python-api-mysqlconnection-unread-results">MySQLConnection.unread_results Property</a></dt><dt id="ientry-id4213">MySQLConnection.user property, <a class="indexterm" href="#connector-python-api-mysqlconnection-user">MySQLConnection.user Property</a></dt><dt id="ientry-id4195">MySQLConnection.use_unicode property, <a class="indexterm" href="#connector-python-api-mysqlconnection-use-unicode">MySQLConnection.use_unicode Property</a></dt><dt id="ientry-id4261">MySQLConnectionPool.add_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-add-connection">MySQLConnectionPool.add_connection() Method</a></dt><dt id="ientry-id4280">MySQLConnectionPool.get_connection() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-get-connection">MySQLConnectionPool.get_connection() Method</a></dt><dt id="ientry-id4309">MySQLConnectionPool.pool_name property, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-pool-name">MySQLConnectionPool.pool_name Property</a></dt><dt id="ientry-id4292">MySQLConnectionPool.set_config() method, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-set-config">MySQLConnectionPool.set_config() Method</a></dt><dt id="ientry-id4461">MySQLCursor.add_attribute() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-add-attribute">MySQLCursor.add_attribute() Method</a></dt><dt id="ientry-id4502">MySQLCursor.callproc() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-callproc">MySQLCursor.callproc() Method</a></dt><dt id="ientry-id4480">MySQLCursor.clear_attributes() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-clear-attributes">MySQLCursor.clear_attributes() Method</a></dt><dt id="ientry-id4529">MySQLCursor.close() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-close">MySQLCursor.close() Method</a></dt><dt id="ientry-id4709">MySQLCursor.column_names property, <a class="indexterm" href="#connector-python-api-mysqlcursor-column-names">MySQLCursor.column_names Property</a></dt><dt id="ientry-id4723">MySQLCursor.description property, <a class="indexterm" href="#connector-python-api-mysqlcursor-description">MySQLCursor.description Property</a></dt><dt id="ientry-id4539">MySQLCursor.execute() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-execute">MySQLCursor.execute() Method</a></dt><dt id="ientry-id4572">MySQLCursor.executemany() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-executemany">MySQLCursor.executemany() Method</a></dt><dt id="ientry-id4601">MySQLCursor.fetchall() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchall">MySQLCursor.fetchall() Method</a></dt><dt id="ientry-id4613">MySQLCursor.fetchmany() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchmany">MySQLCursor.fetchmany() Method</a></dt><dt id="ientry-id4625">MySQLCursor.fetchone() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchone">MySQLCursor.fetchone() Method</a></dt><dt id="ientry-id4659">MySQLCursor.fetchsets() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchsets">MySQLCursor.fetchsets() Method</a></dt><dt id="ientry-id4671">MySQLCursor.fetchwarnings() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-fetchwarnings">MySQLCursor.fetchwarnings() Method</a></dt><dt id="ientry-id4491">MySQLCursor.get_attributes() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-get-attributes">MySQLCursor.get_attributes() Method</a></dt><dt id="ientry-id4760">MySQLCursor.lastrowid property, <a class="indexterm" href="#connector-python-api-mysqlcursor-lastrowid">MySQLCursor.lastrowid Property</a></dt><dt id="ientry-id4645">MySQLCursor.nextset() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-nextset">MySQLCursor.nextset() Method</a></dt><dt id="ientry-id4786">MySQLCursor.rowcount property, <a class="indexterm" href="#connector-python-api-mysqlcursor-rowcount">MySQLCursor.rowcount Property</a></dt><dt id="ientry-id4808">MySQLCursor.statement property, <a class="indexterm" href="#connector-python-api-mysqlcursor-statement">MySQLCursor.statement Property</a></dt><dt id="ientry-id4693">MySQLCursor.stored_results() method, <a class="indexterm" href="#connector-python-api-mysqlcursor-stored-results">MySQLCursor.stored_results() Method</a></dt><dt id="ientry-id4742">MySQLCursor.warnings property, <a class="indexterm" href="#connector-python-api-mysqlcursor-warnings">MySQLCursor.warnings Property</a></dt><dt id="ientry-id4824">MySQLCursor.with_rows property, <a class="indexterm" href="#connector-python-api-mysqlcursor-with-rows">MySQLCursor.with_rows Property</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_P"></a>P</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id1569">PEP 249, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id4367">PooledMySQLConnection.close() method, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-close">PooledMySQLConnection.close() Method</a></dt><dt id="ientry-id4379">PooledMySQLConnection.config() method, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-config">PooledMySQLConnection.config() Method</a></dt><dt id="ientry-id4388">PooledMySQLConnection.pool_name property, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-pool-name">PooledMySQLConnection.pool_name Property</a></dt><dt id="ientry-id4221">pooling.MySQLConnectionPool class, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool">pooling.MySQLConnectionPool Class</a></dt><dt id="ientry-id4228">pooling.MySQLConnectionPool constructor, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-constructor">pooling.MySQLConnectionPool Constructor</a></dt><dt id="ientry-id4320">pooling.PooledMySQLConnection class, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection">pooling.PooledMySQLConnection Class</a></dt><dt id="ientry-id4345">pooling.PooledMySQLConnection constructor, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-constructor">pooling.PooledMySQLConnection Constructor</a></dt><dt id="ientry-id4941">prepared statements, <a class="indexterm" href="#connector-python-api-mysqlcursorprepared">cursor.MySQLCursorPrepared Class</a></dt><dt id="ientry-id3340">property</dt><dd><dl><dt>mysql.connector.apilevel, <a class="indexterm" href="#connector-python-api-mysql-connector-apilevel">mysql.connector.apilevel Property</a></dt><dt>mysql.connector.paramstyle, <a class="indexterm" href="#connector-python-api-mysql-connector-paramstyle">mysql.connector.paramstyle Property</a></dt><dt>mysql.connector.threadsafety, <a class="indexterm" href="#connector-python-api-mysql-connector-threadsafety">mysql.connector.threadsafety Property</a></dt><dt>mysql.connector.__version_info__, <a class="indexterm" href="#connector-python-api-mysql-connector-version-info">mysql.connector.__version_info__ Property</a></dt><dt>mysql.connector.__version__, <a class="indexterm" href="#connector-python-api-mysql-connector-version">mysql.connector.__version__ Property</a></dt><dt>MySQLConnection.autocommit, <a class="indexterm" href="#connector-python-api-mysqlconnection-autocommit">MySQLConnection.autocommit Property</a></dt><dt>MySQLConnection.can_consume_results, <a class="indexterm" href="#connector-python-api-mysqlconnection-can-consume-results">MySQLConnection.can_consume_results Property</a></dt><dt>MySQLConnection.charset, <a class="indexterm" href="#connector-python-api-mysqlconnection-charset">MySQLConnection.charset Property</a></dt><dt>MySQLConnection.client_flags, <a class="indexterm" href="#connector-python-api-mysqlconnection-client-flags">MySQLConnection.client_flags Property</a></dt><dt>MySQLConnection.collation, <a class="indexterm" href="#connector-python-api-mysqlconnection-collation">MySQLConnection.collation Property</a></dt><dt>MySQLConnection.connected, <a class="indexterm" href="#connector-python-api-mysqlconnection-connected">MySQLConnection.connected Property</a></dt><dt>MySQLConnection.connection_id, <a class="indexterm" href="#connector-python-api-mysqlconnection-connection-id">MySQLConnection.connection_id Property</a></dt><dt>MySQLConnection.converter-class, <a class="indexterm" href="#connector-python-api-mysqlconnection-converter-class">MySQLConnection.converter-class Property</a></dt><dt>MySQLConnection.database, <a class="indexterm" href="#connector-python-api-mysqlconnection-database">MySQLConnection.database Property</a></dt><dt>MySQLConnection.get_warnings, <a class="indexterm" href="#connector-python-api-mysqlconnection-get-warnings">MySQLConnection.get_warnings Property</a></dt><dt>MySQLConnection.in_transaction, <a class="indexterm" href="#connector-python-api-mysqlconnection-in-transaction">MySQLConnection.in_transaction Property</a></dt><dt>MySQLConnection.raise_on_warnings, <a class="indexterm" href="#connector-python-api-mysqlconnection-raise-on-warnings">MySQLConnection.raise_on_warnings Property</a></dt><dt>MySQLConnection.server_host, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-host">MySQLConnection.server_host Property</a></dt><dt>MySQLConnection.server_info, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-info">MySQLConnection.server_info Property</a></dt><dt>MySQLConnection.server_port, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-port">MySQLConnection.server_port Property</a></dt><dt>MySQLConnection.server_version, <a class="indexterm" href="#connector-python-api-mysqlconnection-server-version">MySQLConnection.server_version Property</a></dt><dt>MySQLConnection.sql_mode, <a class="indexterm" href="#connector-python-api-mysqlconnection-sql-mode">MySQLConnection.sql_mode Property</a></dt><dt>MySQLConnection.time_zone, <a class="indexterm" href="#connector-python-api-mysqlconnection-time-zone">MySQLConnection.time_zone Property</a></dt><dt>MySQLConnection.unix_socket, <a class="indexterm" href="#connector-python-api-mysqlconnection-unix-socket">MySQLConnection.unix_socket Property</a></dt><dt>MySQLConnection.unread_results, <a class="indexterm" href="#connector-python-api-mysqlconnection-unread-results">MySQLConnection.unread_results Property</a></dt><dt>MySQLConnection.user, <a class="indexterm" href="#connector-python-api-mysqlconnection-user">MySQLConnection.user Property</a></dt><dt>MySQLConnection.use_unicode, <a class="indexterm" href="#connector-python-api-mysqlconnection-use-unicode">MySQLConnection.use_unicode Property</a></dt><dt>MySQLConnectionPool.pool_name, <a class="indexterm" href="#connector-python-api-mysqlconnectionpool-pool-name">MySQLConnectionPool.pool_name Property</a></dt><dt>MySQLCursor.column_names, <a class="indexterm" href="#connector-python-api-mysqlcursor-column-names">MySQLCursor.column_names Property</a></dt><dt>MySQLCursor.description, <a class="indexterm" href="#connector-python-api-mysqlcursor-description">MySQLCursor.description Property</a></dt><dt>MySQLCursor.lastrowid, <a class="indexterm" href="#connector-python-api-mysqlcursor-lastrowid">MySQLCursor.lastrowid Property</a></dt><dt>MySQLCursor.rowcount, <a class="indexterm" href="#connector-python-api-mysqlcursor-rowcount">MySQLCursor.rowcount Property</a></dt><dt>MySQLCursor.statement, <a class="indexterm" href="#connector-python-api-mysqlcursor-statement">MySQLCursor.statement Property</a></dt><dt>MySQLCursor.warnings, <a class="indexterm" href="#connector-python-api-mysqlcursor-warnings">MySQLCursor.warnings Property</a></dt><dt>MySQLCursor.with_rows, <a class="indexterm" href="#connector-python-api-mysqlcursor-with-rows">MySQLCursor.with_rows Property</a></dt><dt>PooledMySQLConnection.pool_name, <a class="indexterm" href="#connector-python-api-pooledmysqlconnection-pool-name">PooledMySQLConnection.pool_name Property</a></dt><dt>_mysql_connector.MySQL.have_result_set, <a class="indexterm" href="#connector-python-api-cext-have-result-set">_mysql_connector.MySQL.have_result_set Property</a></dt></dl></dd><dt id="ientry-id1573">Python, <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt><dt id="ientry-id1567">Python Database API Specification v2.0 (PEP 249), <a class="indexterm" href="#connector-python-introduction">Introduction to MySQL Connector/Python</a></dt></dl></div><div class="indexdiv"><h3><a name="connector-python_index0_S"></a>S</h3> [<a href="#ix01">index top</a>]<dl><dt id="ientry-id4842">Subclasses cursor.mysqlcursor, <a class="indexterm" href="#connector-python-api-cursor-subclasses">Subclasses cursor.MySQLCursor</a></dt></dl></div></div></div></div><div class="copyright-footer"></div></body></html>
Binary files 9.4.0-1/mysqlx-connector-python/docs/mysql-connector-python.pdf and 9.5.0-1/mysqlx-connector-python/docs/mysql-connector-python.pdf differ
diff -pruN 9.4.0-1/mysqlx-connector-python/docs/mysql-connector-python.txt 9.5.0-1/mysqlx-connector-python/docs/mysql-connector-python.txt
--- 9.4.0-1/mysqlx-connector-python/docs/mysql-connector-python.txt	2025-07-10 16:09:39.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/docs/mysql-connector-python.txt	2025-10-15 05:28:33.000000000 +0000
@@ -23,19 +23,19 @@ MySQL Connector/Python Developer Guide
    Licensing information.  This product may include third-party
    software, used under license. If you are using a Commercial
    release of MySQL Connector/Python, see the MySQL
-   Connector/Python 9.3 Commercial License Information User
+   Connector/Python 9.5 Commercial License Information User
    Manual
-   (https://downloads.mysql.com/docs/licenses/connector-python-9.3-com-en.pdf) for licensing information, including licensing
+   (https://downloads.mysql.com/docs/licenses/connector-python-9.5-com-en.pdf) for licensing information, including licensing
    information relating to third-party software that may be
    included in this Commercial release. If you are using a
    Community release of MySQL Connector/Python, see the MySQL
-   Connector/Python 9.3 Community License Information User
+   Connector/Python 9.5 Community License Information User
    Manual
-   (https://downloads.mysql.com/docs/licenses/connector-python-9.3-gpl-en.pdf) for licensing information, including licensing
+   (https://downloads.mysql.com/docs/licenses/connector-python-9.5-gpl-en.pdf) for licensing information, including licensing
    information relating to third-party software that may be
    included in this Community release.
 
-   Document generated on: 2025-07-02 (revision: 82696)
+   Document generated on: 2025-10-13 (revision: 83739)
      ________________________________________________________
 
 Preface and Legal Notices
@@ -425,12 +425,14 @@ Connector/Python Releases
 
    Connector/Python Version MySQL Server Versions Python
    Versions Connector Status
-   9.1.0 and later 8.0 and later 3.13*, 3.12, 3.11, 3.10, 3.9
+   9.5.0 and later 8.0 and later 3.14, 3.13*, 3.12, 3.11, 3.10
+   General Availability
+   9.10 - 9.4.0 8.0 and later 3.13*, 3.12, 3.11, 3.10, 3.9
    General Availability
    8.4.0 and 9.0.0 8.0 and later 3.12, 3.11, 3.10, 3.9, 3.8
    General Availability
-   8.1.0 through 8.3.0 5.7 and later 3.12 (8.2.0+), 3.11, 3.10,
-   3.9, 3.8 General Availability
+   8.1.0 - 8.3.0 5.7 and later 3.12 (8.2.0+), 3.11, 3.10, 3.9,
+   3.8 General Availability
    8.0 8.0, 5.7, 5.6, 5.5 3.11, 3.10, 3.9, 3.8, 3.7, (3.6 before
    8.0.29), (2.7 and 3.5 before 8.0.24) General Availability
    2.2 (continues as 8.0) 5.7, 5.6, 5.5 3.5, 3.4, 2.7 Developer
@@ -467,8 +469,7 @@ Connector/Python Implementations
        depends on the Python Standard Library.
 
        The X DevAPI variant of the connector requires Python
-       Protobuf. The required version is 4.25.3, and was >=
-       4.21.1,<= 4.21.12 before Connector/Python 9.0.0.
+       Protobuf. The required version is 5.29.4.
 
      * As a C Extension that interfaces with the MySQL C client
        library. This implementation of the protocol is dependent
@@ -773,17 +774,10 @@ $ rpm -i mysqlx-connector-python-ver.dis
 
 4.5 Installing Connector/Python from a Source Distribution
 
-   Connector/Python source distributions are platform
-   independent. Source distributions are packaged in two
-   formats:
-
-     * Zip archive format (.zip file)
-
-     * Compressed tar archive format (.tar.gz file)
-
-   Either of the two packaging formats can be used on any
-   platforms, but Zip archives are more commonly used on Windows
-   systems and tar archives on Unix and Unix-like systems.
+   The Connector/Python source distribution is platform
+   independent, and is packaged in the compressed tar archive
+   format (.tar.gz file). See Obtaining Connector/Python) on how
+   to download them.
 
 Prerequisites for Compiling Connector/Python with the C Extension
 
@@ -809,7 +803,7 @@ Prerequisites for Compiling Connector/Py
        (https://dev.mysql.com/downloads/)).
 
      * For installing the X DevAPI interface only: Protobuf C++
-       (version 4.25.3 or later).
+       (version 5.29.4).
 
 Installing Connector/Python from Source Code Using pip
 
@@ -820,123 +814,72 @@ Installing Connector/Python from Source
    the package installation instead of installing packages
    directly into the Python system environment.
 
-   To install Connector/Python from a Zip archive, download its
-   latest version from the Connector/Python download site (see
-   Obtaining Connector/Python) and follow the steps described
-   below.
-
    For installing the classic interface:
 
-    1. Unpack the Zip archive in a directory of your preference.
-
-    2. Start a terminal and change location to the folder where
-       you unpacked the Zip archive. The unpacked folder should
-       have a layout similar to the following:
-
-    mysql-connector-python-x.y.z-src
-    ├── CHANGES.txt
-    ├── CONTRIBUTING.md
-    ├── LICENSE.txt
-    ├── mysql-connector-python
-    │...
-    │├── setup.py
-    │...
-    ├── pyproject.toml
-    ├── README.rst
-    ├── README.txt
-    └── SECURITY.md
-
-    3. Go into the mysql-connector-python-x.y.z-src folder, and
-       perform the installation using this command:
+    1. Download the latest version of the sdist of
+       Connector/Python for the classic MySQL protocol, whose
+       name is in the format of
+       mysql_connector_python-x.y.z.tar.gz.
 
- pip install ./mysql-connector-python
-
-       Warning
-       DO NOT use mysql-connector-python instead of
-       ./mysql-connector-python, as the former will install the
-       WHEEL package from the PyPI repository, and the latter
-       will install the local WHEEL that is compiled from the
-       source code.
-
-       To include the C Extension, use these steps instead to
+    2. Optional: To include the C Extension, use these steps to
        provide the path to the installation directory of MySQL
        Server (or to the folder where the server binaries are
        located) with the MYSQL_CAPI system variable before
        running the installation step. On Linux platforms:
 
  $ export MYSQL_CAPI=<path to server binaries>
- $ pip install ./mysql-connector-python
 
        On Windows platforms:
 
  > $env:MYSQL_CAPI=<path to server binaries>
- > pip install ./mysql-connector-python
 
        Note
        It is not required that the server is actually installed
        on the system; for compiling the C-extension, the
        presence of libraries are sufficient
 
-   For installing X DevAPI:
-
-    1. Unpack the Zip archive in a directory of your preference.
+    3. Perform the installation using this command:
 
-    2. Start a terminal and change location to the folder where
-       you unpacked the Zip archive. The unpacked folder should
-       have a layout similar to the following:
-
-  mysql-connector-python-x.y.z-src
-    ├── CHANGES.txt
-    ├── CONTRIBUTING.md
-    ├── LICENSE.txt
-    ├── mysqlx-connector-python
-    │...
-    │├── setup.py
-    │...
-    ├── pyproject.toml
-    ├── README.rst
-    ├── README.txt
-    └── SECURITY.md
+ pip install ./mysql_connector_python-x.y.z.tar.gz
+       Warning
+       DO NOT use mysql-connector-python instead of
+       ./mysql_connector_python-x.y.z.tar.gz, as the former will
+       install the WHEEL package from the PyPI repository, and
+       the latter will install the local WHEEL that is compiled
+       from the source code.
 
-    3. Go into the mysql-connector-python-x.y.z-src folder, and
-       perform the installation using this commands:
+   For installing X DevAPI:
 
- pip install ./mysqlx-connector-python
-
-       Warning
-       DO NOT use mysqlx-connector-python instead of
-       ./mysqlx-connector-python, as the former will install the
-       WHEEL package from the PyPI repository, and the latter
-       will install the local WHEEL that is compiled from the
-       source code.
-
-       To include the Protobuf C-Extension, use these commands
-       instead on Linux platforms to provide the path to the
-       folder where the protobuf binaries are located by the
-       MYSQLXPB_PROTOBUF system variable before the installation
-       step:
+    1. Download the latest version of the sdist of
+       Connector/Python for the MySQL X Protocol, whose name is
+       in the format of mysqlx_connector_python-x.y.z.tar.gz.
+
+    2. Optional: To include the Protobuf C-Extension, use these
+       commands on Linux platforms to provide the paths to the
+       Protobuf folders by the MYSQLXPB_* system variables
+       before the installation step:
 
  $ export MYSQLXPB_PROTOBUF=<path to protobuf binaries>
  $ export MYSQLXPB_PROTOBUF_INCLUDE_DIR="${MYSQLXPB_PROTOBUF}/include"
  $ export MYSQLXPB_PROTOBUF_LIB_DIR="${MYSQLXPB_PROTOBUF}/lib"
  $ export MYSQLXPB_PROTOC="${MYSQLXPB_PROTOBUF}/bin/protoc"
- $ pip install ./mysqlx-connector-python
 
-       Or these commands on Windows platforms to provide the
-       path to the folder where the protobuf binaries are
-       located by the PROTOBUF system variable before the
-       installation step:
+       Or these commands on Windows platforms:
 
  > $env:PROTOBUF=<path to protobuf binaries>
  > $env:PROTOBUF_INCLUDE_DIR=$env:PROTOBUF+"\include"
  > $env:PROTOBUF_LIB_DIR=$env:PROTOBUF+"\lib"
  > $env:PROTOC=$env:PROTOBUF+"\bin\protoc.exe"
- > pip install ./mysqlx-connector-python
 
-       Note
-       It is not required that the server is actually installed
-       on the system; for compiling the C-extension, the
-       presence of libraries are sufficient
+    3. Perform the installation using this command:
+
+ pip install ./mysqlx_connector_python-x.y.z.tar.gz
+       Warning
+       DO NOT use mysqlx-connector-python instead of
+       ./mysqlx_connector_python-x.y.z.tar.gz, as the former
+       will install the WHEEL package from the PyPI repository,
+       and the latter will install the local WHEEL that is
+       compiled from the source code.
 
 4.6 Verifying Your Connector/Python Installation
 
@@ -2564,7 +2507,7 @@ pip install mysql-connector-python
    Or pass in [telemetry] when installing Connector/Python to
    perform the same actions except it installs a specific and
    tested OpenTelemetry version, which for Connector/Python
-   9.0.0 is OpenTelemetry v1.18.0:
+   9.4.0 and later is OpenTelemetry v1.33.1:
 
 pip install mysql-connector-python[telemetry]
 
diff -pruN 9.4.0-1/mysqlx-connector-python/docs/mysqlx/Makefile 9.5.0-1/mysqlx-connector-python/docs/mysqlx/Makefile
--- 9.4.0-1/mysqlx-connector-python/docs/mysqlx/Makefile	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/docs/mysqlx/Makefile	2025-10-15 05:27:11.000000000 +0000
@@ -1,3 +1,31 @@
+# Copyright (c) 2017, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
 # Makefile for Sphinx documentation
 #
 
diff -pruN 9.4.0-1/mysqlx-connector-python/docs/mysqlx/_static/.placeholder 9.5.0-1/mysqlx-connector-python/docs/mysqlx/_static/.placeholder
--- 9.4.0-1/mysqlx-connector-python/docs/mysqlx/_static/.placeholder	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/docs/mysqlx/_static/.placeholder	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2017, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysqlx-connector-python/docs/mysqlx/make.bat 9.5.0-1/mysqlx-connector-python/docs/mysqlx/make.bat
--- 9.4.0-1/mysqlx-connector-python/docs/mysqlx/make.bat	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/docs/mysqlx/make.bat	2025-10-15 05:27:11.000000000 +0000
@@ -1,3 +1,31 @@
+REM Copyright (c) 2017, 2025, Oracle and/or its affiliates.
+REM
+REM This program is free software; you can redistribute it and/or modify
+REM it under the terms of the GNU General Public License, version 2.0, as
+REM published by the Free Software Foundation.
+REM
+REM This program is designed to work with certain software (including
+REM but not limited to OpenSSL) that is licensed under separate terms,
+REM as designated in a particular file or component or in included license
+REM documentation. The authors of MySQL hereby grant you an
+REM additional permission to link the program and your derivative works
+REM with the separately licensed software that they have either included with
+REM the program or referenced in the documentation.
+REM
+REM Without limiting anything contained in the foregoing, this file,
+REM which is part of MySQL Connector/Python, is also subject to the
+REM Universal FOSS Exception, version 1.0, a copy of which can be found at
+REM http://oss.oracle.com/licenses/universal-foss-exception.
+REM
+REM This program is distributed in the hope that it will be useful, but
+REM WITHOUT ANY WARRANTY; without even the implied warranty of
+REM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+REM See the GNU General Public License, version 2.0, for more details.
+REM
+REM You should have received a copy of the GNU General Public License
+REM along with this program; if not, write to the Free Software Foundation, Inc.,
+REM 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
 @ECHO OFF
 
 REM Command file for Sphinx documentation
diff -pruN 9.4.0-1/mysqlx-connector-python/docs/mysqlx/requirements.rst 9.5.0-1/mysqlx-connector-python/docs/mysqlx/requirements.rst
--- 9.4.0-1/mysqlx-connector-python/docs/mysqlx/requirements.rst	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/docs/mysqlx/requirements.rst	2025-10-15 05:27:11.000000000 +0000
@@ -2,7 +2,7 @@ Requirements
 ============
 
 * MySQL 8.0.0 or higher, with the X Plugin enabled
-* Python >= 3.9
+* Python >= 3.10
 * Protobuf C++ (version == 5.29.4)
 * Python Protobuf (version == 5.29.4)
 * dnspython (version == 2.6.1) for DNS SRV support
diff -pruN 9.4.0-1/mysqlx-connector-python/lib/__init__.py 9.5.0-1/mysqlx-connector-python/lib/__init__.py
--- 9.4.0-1/mysqlx-connector-python/lib/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/lib/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2016, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysqlx-connector-python/lib/mysqlx/protocol.py 9.5.0-1/mysqlx-connector-python/lib/mysqlx/protocol.py
--- 9.4.0-1/mysqlx-connector-python/lib/mysqlx/protocol.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/lib/mysqlx/protocol.py	2025-10-15 05:27:11.000000000 +0000
@@ -29,6 +29,7 @@
 """Implementation of the X protocol for MySQL servers."""
 
 import struct
+import sys
 import zlib
 
 from io import BytesIO
@@ -42,7 +43,10 @@ except ImportError:
     HAVE_LZ4 = False
 
 try:
-    import zstandard as zstd
+    if sys.version_info.major >= 3 and sys.version_info.minor >= 14:
+        from compression import zstd
+    else:
+        import zstandard as zstd
 
     HAVE_ZSTD = True
 except ImportError:
diff -pruN 9.4.0-1/mysqlx-connector-python/lib/mysqlx/py.typed 9.5.0-1/mysqlx-connector-python/lib/mysqlx/py.typed
--- 9.4.0-1/mysqlx-connector-python/lib/mysqlx/py.typed	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/lib/mysqlx/py.typed	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2014, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysqlx-connector-python/lib/mysqlx/version.py 9.5.0-1/mysqlx-connector-python/lib/mysqlx/version.py
--- 9.4.0-1/mysqlx-connector-python/lib/mysqlx/version.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/lib/mysqlx/version.py	2025-10-15 05:27:11.000000000 +0000
@@ -32,7 +32,7 @@ The file version.py gets installed and i
 as mysqlx.version.
 """
 
-VERSION = (9, 4, 0, "", 1)
+VERSION = (9, 5, 0, "", 1)
 
 # pylint: disable=consider-using-f-string
 if VERSION[3] and VERSION[4]:
diff -pruN 9.4.0-1/mysqlx-connector-python/setup.py 9.5.0-1/mysqlx-connector-python/setup.py
--- 9.4.0-1/mysqlx-connector-python/setup.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/setup.py	2025-10-15 05:27:11.000000000 +0000
@@ -39,7 +39,6 @@ sys.path.insert(0, ".")
 
 from cpydist import BuildExt, Install, InstallLib
 from cpydist.bdist import DistBinary
-from cpydist.bdist_solaris import DistSolaris
 from cpydist.sdist import DistSource
 from setuptools import Extension, find_packages, setup
 
@@ -67,7 +66,6 @@ with open(version_py, "rb") as fp:
 
 COMMAND_CLASSES = {
     "bdist": DistBinary,
-    "bdist_solaris": DistSolaris,
     "build_ext": BuildExt,
     "install": Install,
     "install_lib": InstallLib,
@@ -147,11 +145,11 @@ def main() -> None:
             "Operating System :: POSIX :: Linux",
             "Operating System :: Unix",
             "Programming Language :: Python :: 3",
-            "Programming Language :: Python :: 3.9",
             "Programming Language :: Python :: 3.10",
             "Programming Language :: Python :: 3.11",
             "Programming Language :: Python :: 3.12",
             "Programming Language :: Python :: 3.13",
+            "Programming Language :: Python :: 3.14",
             "Topic :: Database",
             "Topic :: Software Development",
             "Topic :: Software Development :: Libraries :: Python Modules",
@@ -159,11 +157,15 @@ def main() -> None:
         ],
         ext_modules=EXTENSIONS,
         cmdclass=COMMAND_CLASSES,
-        python_requires=">=3.9",
+        python_requires=">=3.10",
         install_requires=["protobuf==5.29.4"],
         extras_require={
             "dns-srv": ["dnspython==2.6.1"],
-            "compression": ["lz4==4.4.4", "zstandard==0.23.0"],
+            "compression": (
+                ["lz4==4.4.4"] + ["zstandard==0.23.0"]
+                if not (sys.version_info.major >= 3 and sys.version_info.minor >= 14)
+                else []
+            ),
         },
     )
 
@@ -183,8 +185,7 @@ def copy_metadata_files() -> None:
 
 
 def get_long_description() -> str:
-    """Extracts a long description from the README.rst file that is suited for this specific package.
-    """
+    """Extracts a long description from the README.rst file that is suited for this specific package."""
     with open(pathlib.Path(os.getcwd(), "./README.rst")) as file_handle:
         # The README.rst text is meant to be shared by both mysql and mysqlx packages, so after getting it we need to
         # parse it in order to remove the bits of text that are not meaningful for this package (mysqlx)
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/__init__.py 9.5.0-1/mysqlx-connector-python/tests/__init__.py
--- 9.4.0-1/mysqlx-connector-python/tests/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2013, 2024, Oracle and/or its affiliates.
+# Copyright (c) 2013, 2025, Oracle and/or its affiliates.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License, version 2.0, as
@@ -45,7 +45,7 @@ import sys
 import traceback
 import unittest
 
-from distutils.dist import Distribution
+from setuptools.dist import Distribution
 from functools import wraps
 from pkgutil import walk_packages
 from unittest.case import SkipTest
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_cert.pem 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_cert.pem
--- 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_cert.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_cert.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,23 +1,20 @@
 -----BEGIN CERTIFICATE-----
-MIIDwjCCAqqgAwIBAgIUfleE5GCpYi5C1s2L45tEWf2TLKwwDQYJKoZIhvcNAQEL
+MIIDVjCCAj6gAwIBAgIUCTuLqLFh70VB9DCmvKnYET7jvRAwDQYJKoZIhvcNAQEL
 BQAwQzEmMCQGA1UECwwdTXlTUUxYQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0ExGTAX
-BgNVBAMMEE15Q29ublB5IFJvb3QgQ0EwHhcNMjQwNzE3MTUxNjEwWhcNMzMwODA1
-MTUxNjEwWjBDMSYwJAYDVQQLDB1NeVNRTFhDb25uZWN0b3JQeXRob24gUm9vdCBD
+BgNVBAMMEE15Q29ublB5IFJvb3QgQ0EwHhcNMjUwNzI4MTQzMjUyWhcNMzQwODE2
+MTQzMjUyWjBDMSYwJAYDVQQLDB1NeVNRTFhDb25uZWN0b3JQeXRob24gUm9vdCBD
 QTEZMBcGA1UEAwwQTXlDb25uUHkgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAOYuwmkY/jWhRZqyQ3XC7XHCWbc9QWSKIXOTk/UV/C06U3Es
-m+cK5izuSWLHAVHbOhfYOA03TksrAlQJAh03DcfebqD5dufuYnRh1widApOTEcOs
-tU5XTIZZr5Z5cKI7dHCNRuJ2iI6zSc41P4Nd6rkqK31dar+5Bc6/lPZF99BhBe81
-lbYcFcYdeAs//znzWgWBgktJ/5ASk4fRafDzbp9gxgjzqF/A2RosVPf1SZ9zAXpz
-Rl1HhU4lBKfl42zwQ4I3yJ4SeG+nRlEoYsfS+XbW7A7vPXjOtvtXvrVel1iF+NHS
-v/nhXA5f0MZwBq1ZYFhepKNNj2OBqIeZb0XETPkCAwEAAaOBrTCBqjAdBgNVHQ4E
-FgQU2PLB8s9fahL5tgxQ7S5+1Vuj170waAYDVR0jBGEwX6FHpEUwQzEmMCQGA1UE
-CwwdTXlTUUxYQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0ExGTAXBgNVBAMMEE15Q29u
-blB5IFJvb3QgQ0GCFH5XhORgqWIuQtbNi+ObRFn9kyysMA8GA1UdEwEB/wQFMAMB
-Af8wDgYDVR0PAQH/BAQDAgKEMA0GCSqGSIb3DQEBCwUAA4IBAQBH/T3ahsNK90SI
-SdrzZHcfXuf9pB/lHZtdpWmtCjY9ckqo/VmhxKjjtC1LfFHaqRrpCbVO1hNYK5co
-8jkr8qICIBOVVzXeTp1vr11CsRwqcUZkSLTcRzkYe94h5SC0nV6F4piiLdT0jM+p
-1svbw8rVA6P/HKq+ACkfDI/sl95L0y2aoXZN6XhdtrKY20QOwjZpDjwDdy/IY99T
-2WkA6YyfRPZSN0q155F/gN/gzG2+kJod8AfJQbGkbCOdi5VNBvuxXZVRHBuuNBUe
-piMRNOC4oPu+blbZ2u4fLxWRgNRqMYHRd1+RZKe/WxslYJRSsA8GFB27B+R7QT4w
-dOUdjSoI
+ggEPADCCAQoCggEBAKbbGKvA6eCYC0QnMMXeFCt4kjvY8+7EOWXAFtCOj3B7jXDl
+obHpKKs5WCNlNrfwOQZ26U8gHXLkP+5iKOu0FXb8A1MdCctqO9IDCtDB8pwMGDOk
+Ah2nc6XKB1xs+yF0uOtKHgpdQwCQxfTH4gQYoC5Nnc0hvUM75QGeYMQCFByxNlUI
+dVvo1rIWrTRdDCKijf85cuLbls4T4vWqDfPFw7MQRz512XXazkWLLe/T2thzhz5b
+e6oW85cBzJQTdIeTFBBIlvC7ohZcKg+IzcJF8gNHNj7yx3mhSuQAKu/9OD34up6z
+B/1Znu4CRs3NpY8IwHiohFWheNV8bTooAY043xECAwEAAaNCMEAwHQYDVR0OBBYE
+FKZADYkc/FO9xW76kHdcYlHk994xMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgKEMA0GCSqGSIb3DQEBCwUAA4IBAQBjES1fyoqLHWqYjqPw84cKbRu6cAja
+oTbJcBH2XyrC7bI1H/mSDi8erdLQvHmPJlsOw5nua5i8h/68xq6/3oVLml+gqe/P
+vyc/eZXwikGav5jhbG/gj91PKMg+q6M3p1IQ5Bx3CGKEvO3gId0BbtMO8NipFyZt
+GiUaZsb7iCaVvwo6H+CImSArQf5ZM6Mr7X8cgqvbBgE+xN/6N+VRuFK4cKFlis1n
+mofOmKloc5/3vPXM9HkKtqHBHc6RdWzI6XspFRKZFlJZhiPRkwZjnXMyhGu7lqKh
+BM6K26ktKoY2wpvlZ2Iw5LG6XnDI/XoK4tbcyxNaK1a6XqkRzVaVawXM
 -----END CERTIFICATE-----
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_cert_1.pem 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_cert_1.pem
--- 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_cert_1.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_cert_1.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,23 +1,20 @@
 -----BEGIN CERTIFICATE-----
-MIIDwjCCAqqgAwIBAgIUVR1/CYBO+/htWgN9eJZpiCk/TnQwDQYJKoZIhvcNAQEL
+MIIDVjCCAj6gAwIBAgIUTIQkBPQn63xVKTqLgfF8C5OaiLkwDQYJKoZIhvcNAQEL
 BQAwQzEmMCQGA1UECwwdTXlTUUxYQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0ExGTAX
-BgNVBAMMEE15Q29ublB5IFJvb3QgQ0EwHhcNMjQwNzE3MTUxNjEwWhcNMzMwODA1
-MTUxNjEwWjBDMSYwJAYDVQQLDB1NeVNRTFhDb25uZWN0b3JQeXRob24gUm9vdCBD
+BgNVBAMMEE15Q29ublB5IFJvb3QgQ0EwHhcNMjUwNzI4MTQzMjUyWhcNMzQwODE2
+MTQzMjUyWjBDMSYwJAYDVQQLDB1NeVNRTFhDb25uZWN0b3JQeXRob24gUm9vdCBD
 QTEZMBcGA1UEAwwQTXlDb25uUHkgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBALG5lpoJjDGb8jDklbXBm85d9SdkUcxCycUYM0rJhcOiBS9S
-XCmE2FKyMbpls6wQzV01CKcx3U8/p+pdYIaSEAKK2ZqB2LKlqv5gYI1d1/prNfAb
-SpmsPr0HxL0uC49e6bczZGkTflASdAT96sFs5GGt3YLv6xsw/3m1IUTbXHoEja2d
-oS8QvhJssDQinKZRHyjqvStvCc3W3zqQAAYsnCP2Iv38GSpisTJwqJ7IO8i6MKTQ
-k1MSN/0i6EEPCm48SBLxlMhfzedcq23VhNzjvGQaol27JB5vUNQkg8OpOT46TNgs
-qr4f0BR76J/Q4JxNqhrgiQo1O0KPlEwgxF/msyUCAwEAAaOBrTCBqjAdBgNVHQ4E
-FgQUWmWt89elDe1wmAc0Gfw+k9lO58AwaAYDVR0jBGEwX6FHpEUwQzEmMCQGA1UE
-CwwdTXlTUUxYQ29ubmVjdG9yUHl0aG9uIFJvb3QgQ0ExGTAXBgNVBAMMEE15Q29u
-blB5IFJvb3QgQ0GCFFUdfwmATvv4bVoDfXiWaYgpP050MA8GA1UdEwEB/wQFMAMB
-Af8wDgYDVR0PAQH/BAQDAgKEMA0GCSqGSIb3DQEBCwUAA4IBAQASuNSnJ/qZ6np1
-r6PSNsLdOteUBxE8byWAL+HnoPecXdouFG4na2heqV3LrQqE8umHW4TPX/SK8rnK
-jbfatOKuZaM+k1s+JfM3tOPfxnT4U6ilNpc+YF8D3stvLUtdYUxHS765q6lI6Mpx
-0RZtQQ7SGaS0NR3oJIjAwp0WGcWEOVrAbc2xG8qJKYwgz4aWlyxNjC67lhQI+Nhr
-YWitPfepv15U7NeagExXYbDBNZGYb7ywRXJ4G9zV6IyzlHfBbHgtcLU4jY+R4r5+
-hKHvnvF62fE19Ta14ZL2wlkM0OL5EuibQHv+xKsy1VBMk+t498m6BZ5ywEVIr6ol
-w8XNnRau
+ggEPADCCAQoCggEBAKbcaIw74/8GmldWaLvmUwleN8Ab5ik6G1JdDEhz0OBxfCej
+EOOJ380XAMLCOSv6BnU8gRKVGywiOSsYwuqyJWCltzVJqrl1OfeIzP1F8AefrQye
+v3jrNy39W7FL83ofBfjIkjTVBGQYpB2oeGpiHv2D6YBQh0FK1uvP9Fo5mmYZpNr7
+DZLE6JcF2T/XGRf5hBVxH1zztGa2VRkx47M6GpowYbbiy2BmzHYhsONUjit+1WkA
+IL3gkdp9Uzrg3QGkryBYPrgzd2TPVjLN2ci2Sx3wmbamBMXlhmJ4k0K9ie50hfL9
+OCddotwoK1etga33SP0HabiuELMeJguzhJiVdo0CAwEAAaNCMEAwHQYDVR0OBBYE
+FLbKOZdHtV1ihSecefo/ROrhroU6MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
+BAQDAgKEMA0GCSqGSIb3DQEBCwUAA4IBAQAiRQPPlTmaw2futDZodSsTfvVIL0Vb
+555lMw3quV6h9Yd+op+jzEiMav5AuAQZ6LZgzBW1oBbi8+uBDt7lwoxSpxAKRDTD
+7iBUAfaPoeyks6xYlOGOuT73eJFr09pwoz/qt4hmxnha/1k4Mcbja6MSPSXWMG5C
+1Zz93/g1QqH209DzqcdUDANBjdZLxaP0pSOuDbAeUQAtw96mRctbKRym70QsJY03
+QkGYstXZlT2L8L3+hmnOOv/j+J+BleZm9ZgjiSIjgTyqedh1GHBD+hWpePxg2Xk9
+rNAHu6rFWQdtpO9geimtuIvOWYElNSDD/HHVGpPEtVbs1AzGdLNp6JBM
 -----END CERTIFICATE-----
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_key.pem 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_key.pem
--- 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_key.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_key.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDmLsJpGP41oUWa
-skN1wu1xwlm3PUFkiiFzk5P1FfwtOlNxLJvnCuYs7klixwFR2zoX2DgNN05LKwJU
-CQIdNw3H3m6g+Xbn7mJ0YdcInQKTkxHDrLVOV0yGWa+WeXCiO3RwjUbidoiOs0nO
-NT+DXeq5Kit9XWq/uQXOv5T2RffQYQXvNZW2HBXGHXgLP/8581oFgYJLSf+QEpOH
-0Wnw826fYMYI86hfwNkaLFT39UmfcwF6c0ZdR4VOJQSn5eNs8EOCN8ieEnhvp0ZR
-KGLH0vl21uwO7z14zrb7V761XpdYhfjR0r/54VwOX9DGcAatWWBYXqSjTY9jgaiH
-mW9FxEz5AgMBAAECggEABKdILmGUjWcsgKS0c5kZ0vLZJ04cIukeT9dusRB9TTkb
-OT6Wi0dKNnkob3sIS4xD989Fo3zCqYczJZmbWusDQrm8NlG8xee+QqM8upOZWvw+
-P8dfe004ApT7FVlwqGhNIb5gGGbJkCBPRcAyqm2iYmptanwnkuctwcuCj9pZGMkS
-MqSMKPKmduc41OiSG0uwcYkckvVzGG6iWNpMa9zjyunRveRRhY8TOKGBDQIrfj9U
-vawnRFuXHlGa5V4jHUORxUY30Xl/Tky3BFtGOEG/H9MhMvuHZ5diWoxY/mz+eqoC
-yyHPkmkt21uLIYrnYeaGlOlVL5eSxkgaY6Mzh41xoQKBgQD8alscYzYuI97mH6Rj
-wf017DGSYyCNP1xRzlYIPCc+grD3I7XzhvW/G0GAjH5nhXYkHknYVvr95vljS1zo
-4gRTuaLa2KOMgcf55l1ZZGJPAI//Q5upv4jbIZAKI0vS2x648QFsDinvyYbzJpF7
-CTkwsxffvb3Bskkp3c2cGsE8kQKBgQDpc5PHDB6l2SWuBlK+lHPZP0kOgKPO/KpR
-3GT2qd5u6g7DBRxUDSc+1Cf2/NHPEbq4rgbjKXG2UxzndQkN+vg7TFf7d/ziRnWg
-a/XmjfiWMT+gVoumDm1NZXzCm1Fnut19+H/IKfs5ODoCVfCgQb8QgEZ6AaQmR4E9
-vkauKmvd6QKBgAn1wGacW5TygWcfNINjMjSgf0xBcRVhvKjVtXtZtEq5KXZ3CET1
-vFiwIKOL56j6ETFXqJ5KwFiodoq+fIoL8RPErXJpPfrbXCK2PlS6q05mvUfbSRcn
-oaTT7DUaM3G8h7fQerfizzDRCOwrR25NbN5JEtYXTJeKC20FfYl9XMahAoGBAOC+
-4RTuiQ7XZ5wLAFvzZThP4dBxbcJWos3eZODHFponAQElCWmtpAuribIRIRe9lMo4
-1+6Xtp51k00M8iOgapwD2mwAztc0SAeiCADmytwlG4EL8LN0DixFuP9NMeiwEI42
-zyXvrKkghVA8VkSiJwQGylKpA9PKYRUE+tyvgFsJAoGABcpbLN+H6S/iwj4YJN6p
-lSxfp4YN+UO3Qd+xp4m17HFZowNbGa8tIkJ39h6NQswtP5rW088b8idBJVDHASfB
-jLc/ERVksItupE0CgLJdGDa3HskvLZW/eDLkiFULMh0OAf5KLB2iMtZuseGnq42/
-eLTas/6nGdrThiuEfJtF/Es=
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCm2xirwOngmAtE
+JzDF3hQreJI72PPuxDllwBbQjo9we41w5aGx6SirOVgjZTa38DkGdulPIB1y5D/u
+YijrtBV2/ANTHQnLajvSAwrQwfKcDBgzpAIdp3OlygdcbPshdLjrSh4KXUMAkMX0
+x+IEGKAuTZ3NIb1DO+UBnmDEAhQcsTZVCHVb6NayFq00XQwioo3/OXLi25bOE+L1
+qg3zxcOzEEc+ddl12s5Fiy3v09rYc4c+W3uqFvOXAcyUE3SHkxQQSJbwu6IWXCoP
+iM3CRfIDRzY+8sd5oUrkACrv/Tg9+Lqeswf9WZ7uAkbNzaWPCMB4qIRVoXjVfG06
+KAGNON8RAgMBAAECggEAATjV9NVIzFifVQXGdNJxA2svy1ZIwdn5kvHfiDTt3US0
+eBJmHr5h3aw1QYsxuTPibwhykWDk8XM6zZelRmzSoT96QUcTXL6yivt+gREHcEGd
+dqFyBem0zkZ9y0Q2tz5hffqcvuKOXTgyN9MNHOe9s137xAhh5kX2ev3WR6JDIgLp
+ZE+uKaurSmhZEp6KZeN+5JEkCxakU2pyRSB0tiuZIXzEqiyvqBm4iecqqa2YKC+Y
+R+ysE7lj/RFlfi4FIR0gU1YB0yLoP4uXrgaCTabDj7W7kHPymbAv0nzluveixZjy
+KaZo3vndKXWJwyZSLE0SbIWL+Q05tT+Qdgn5mexlOQKBgQDUrvHpxAWEhINuJ7jz
+0z8BL3rcwbXOafwa8aedHRaV/cOOtdjM8+JpykqUeHOFMAEEaBFzbrLMwxk3HViA
+YZOXjwpigl+dQQ2EzbOcGUO6h1GRwlaPWkPHS9dMAYb8yO6mqtEtfXMItQ/EFbWw
+pAEq0lbx49sblTCFb3IWXY45bQKBgQDI1sJP1RrkW7TM4cjOZYuNbWoy/P08P+Bj
+Dl7j/PSh+COhD8h92BGJbP9MM2ANMTNKhdLWaCEdCm4oTh5gPokFRfGsz+va5bHA
+0BqQVp2Nw1GprMqjqSSc9pX//Zs7IrppNDHDxuXCckTvdWoMll+VonA+NtZjibVO
+R9EpPMU5tQKBgHq4A0AmaiSfrZKG+xI9hvIxKkxsvXG/98a4P0XJvfmH9inHRbRk
+2PS/0669nbJxE3UucztO2X6K6GbD2QgixV3DHHPg1DjRi3Jgms1sSoc7g1Z+cyG+
+LLO3UCA8FV6QthuXHqGH7DNO/izfdfnZeA70VVS3a/sLZ3bm6kZ7bxA1AoGBAIWs
+i0BfcrqzXy9OyDy30Z6cSKcPQ+2qBktn8TiF0L1NT0mQG73G5kU1yuaI+1FMgfsD
+/0S9oeyWWKNy+zzL4p8j4qtG6JCVeS4AVO3k+JC2g9APNgCgP8JJTaVIwt0lTDVh
+jA3mgF5feAp5d9BQ9eW+bD68eQ1fRtGHc2ujCxJRAoGBALPVbOX0IwsJUTUlEjhn
+9vg0ADjIzVzFV6fFwbHNo9HP0Hf9fOxGD4iqf6VAtgcoEwkSFoZw2T7sQ/KdBFV6
+9vXkOW3PSmbNXkQtCq36ub3fzmqAvkk++utGuny2PK1p89GtDyokMeLGHBINlPl+
+0IUBAG556uPpJW+B5zVBIf4O
 -----END PRIVATE KEY-----
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_key_1.pem 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_key_1.pem
--- 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_key_1.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_CA_key_1.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCxuZaaCYwxm/Iw
-5JW1wZvOXfUnZFHMQsnFGDNKyYXDogUvUlwphNhSsjG6ZbOsEM1dNQinMd1PP6fq
-XWCGkhACitmagdiypar+YGCNXdf6azXwG0qZrD69B8S9LguPXum3M2RpE35QEnQE
-/erBbORhrd2C7+sbMP95tSFE21x6BI2tnaEvEL4SbLA0IpymUR8o6r0rbwnN1t86
-kAAGLJwj9iL9/BkqYrEycKieyDvIujCk0JNTEjf9IuhBDwpuPEgS8ZTIX83nXKtt
-1YTc47xkGqJduyQeb1DUJIPDqTk+OkzYLKq+H9AUe+if0OCcTaoa4IkKNTtCj5RM
-IMRf5rMlAgMBAAECggEAK+lHaRK/1UgLHIJ17P0Doob7efqi7T15Pd3fWnSVPMNs
-1YbbZ5S/oBsQB1Z2gKZ8HzHpy+mZnSmEsvbUURuIoiAtaKv5XxZou8YTRQpxQRm5
-L3SGx5ZTv//J39YfHBLe2xlzDzU2SdFtYghctuLRQMMlDmN56vN9w9P5ftpWLH1G
-gkzkGK6aXgT2OctqFwTn3S6iIUgo7YaxpislEfHSdjDc0BMk39aaqqPtVywJ/j97
-88DY2EhJ9efkzBaOdA7ljxvCKwDUAbVKghLsgZFRRw5fy+y1JPVGgwQiXyO7FfeN
-Tgou5TEtLtTn/FhGHyq8Wc7vi1U1Dc8w3YrU5x4acQKBgQDtiIOM8QERZuIBzgNR
-swt7xUmVEsIwaDLWfoZxeWnzCkj/sFfMJWIM9j/rdNAxzy6QMwgtEenfMYedx89+
-II3hVPyXcOpM1NB4T+QjwkPoVZh8IaH/UXWVQvE7//+7oRESBe/iVfZ968q41CLY
-fpyopK6okSSSqKqUt3ZM9PcbyQKBgQC/ir6c+OPngRhbVpAtLnbE3XGoueYZ3c0W
-4Oi1Tl5nfU3ydb53hDtsGT3KStrsMUh+xhVyZv0CJY8G91Nhexbe3V2zjZ+W9eVG
-yVZ/WSejClkX+j4TByISY9Lr46jStwIEZwoS76p9J06vy6z7Gv+ET4sT+BOyJGBi
-EnACufoSfQKBgQCQVcaSCxQ6DclBjXyI1YIh2HTo57gmD/rsSX/KThuqOlK3Q+Fl
-xEV7WNroaVflHF7P8qKCOINjQ0aEApk7q+5qwOin4U4OF7cBlJIthGsdL33z18AH
-U+leJIpPijRMQAgOapskblXUmEXb39O4t97bvw3+kgumLmVQ7tYs1yGcuQKBgAsc
-p3Y/0ijqClmyKecVHPrKxf892aWCgpVjMtzh0QQ79rusLQKN/0yEIluMACtXqJcC
-MthSNTdcqnGDA6lSFL+VJAx4mNuPJF/46jW1HGGPBiAn+lXsQgPDGsdoi7C9wTY0
-LBdxI/jiwOPd8wkWReCNJMphx/K7vYOzAiCGXYWZAoGBAMh/aU0AVhXsPUCR897P
-dPZDtSTdm6UbXt9h8zfn+UFVcx+w+ao7bODg2qNRGoZWttE0HlRlG/WxVa4pEV13
-kDGKpgv6J5i46vDd+vGSG8d7hqu5rPB85zlCEcSshwOKtqMNqMVs7aS28UV1QUU8
-gxFFCWhEb6OZ4u1j8kbBP78C
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCm3GiMO+P/BppX
+Vmi75lMJXjfAG+YpOhtSXQxIc9DgcXwnoxDjid/NFwDCwjkr+gZ1PIESlRssIjkr
+GMLqsiVgpbc1Saq5dTn3iMz9RfAHn60Mnr946zct/VuxS/N6HwX4yJI01QRkGKQd
+qHhqYh79g+mAUIdBStbrz/RaOZpmGaTa+w2SxOiXBdk/1xkX+YQVcR9c87RmtlUZ
+MeOzOhqaMGG24stgZsx2IbDjVI4rftVpACC94JHafVM64N0BpK8gWD64M3dkz1Yy
+zdnItksd8Jm2pgTF5YZieJNCvYnudIXy/TgnXaLcKCtXrYGt90j9B2m4rhCzHiYL
+s4SYlXaNAgMBAAECggEAH8/MlNPEO3Y4TadZL12Rfis6yMLo5fpAhDreISAHdgrc
+xzfE/ARoqRKWIAtkV/iCa6590xufQxJBQPCnFJSjIKJnY97oEBSD2Sf5IN5JDUMJ
+fGr1iSma6wcvCIW45RLuEgi3KyBjhmvWOhtI3ctYKjAQf9iaeL26bNnINb1erNEu
+tRhQCKXtt1fGJRsj18RRx6hOI3Nme2rL2L+42T34NlL7zPEV4waZ12BVFUZnwZy2
+4nWpw9Qf3udeXvJ+yc9bv+O7EN5XkP+j3XYRu5TbBatNsZ1YCGOQmKHQUWDisias
+vaToMy2jaATiU3hP2KNJ7IqEQGJb9zwz1Yvgqng8pwKBgQDgTiM1qPl8IY2OHgdQ
+9luIxWlwIf9Qrl8NbIrBfOA9acVicgMt+JimgaCLtl2EyGIVEdjbNEgNXULI9Xgl
+ajxb6k6Rh/pv3xHJEVWsilOKjvtmzviLIFt6N8IkM1hyycmvxGlkIPSxgAWdv0QW
+ayacVUpI9ixJqsyDtFOIrtw0ywKBgQC+cFJv0dLAUzkDbuft2n8VUurPNVmgi6Nx
+RsUTivwQ9XeQiaWviTZ9xX/F9gOA63JinsBUiR3V4ZbWZt7Pnmlo5MS9/MGZqeD6
+xo+fWAvjCnq6g2IVNGg7D+ozSix3rS2USwDAQvqRFstQZc0U0aGMZhU8J9flWBRE
+o9NKt4RvBwKBgCaJxkrl6VeGfEe6qQ8kBL4PDPqTHMbD7tjjmUN9LRngHmW3qQww
+9ilFhEv83Tx/ITr1ggjHhsmlCGB2rFnhUtWIAE/IySKHdQrSy6GFcq0Pu+oCDXn5
+6T2qbtTBbaTrPpfQazsk3mXQ1SYxQoWHi264yLaYdSuDCPhn9yI4yOTZAoGAUir6
+lr6stUjzP5T5wznUPWoiYDc/rbKyWazUWaNNMTAIX7fUYlHMziWKBOsqBdUQ7JZc
+m9zxn5gPUgDewCw0hQq4DNVi3x9aMDm+PF1r+5FI9PK9PjL3igxK28h0OUricKqP
+72S24iU4oj7aZtIwZvigzuzODWmcjSU2hHV8Ub8CgYEApb+Tf0IBp+ljjXlYM5s1
+lbVv5juD5veE/Oz2VCoS5QQ83afRzKXmjpnD8wtL2Xm2/XLu8v1zgcgJXSI9BLPD
+tmVaii/ufwBQ668EpO2rJ0GDfaZ86EQt9th+1umtqBw01bkTQ7W3osSFyaEnie71
+d3SL+22GFraKP3mnf5g84DI=
 -----END PRIVATE KEY-----
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_client_cert.pem 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_client_cert.pem
--- 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_client_cert.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_client_cert.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,68 +1,75 @@
 Certificate:
     Data:
-        Version: 1 (0x0)
+        Version: 3 (0x2)
         Serial Number: 2 (0x2)
         Signature Algorithm: sha256WithRSAEncryption
         Issuer: OU=MySQLXConnectorPython Root CA, CN=MyConnPy Root CA
         Validity
-            Not Before: Jul 17 15:16:11 2024 GMT
-            Not After : Jul 17 15:16:11 2025 GMT
+            Not Before: Jul 28 14:32:52 2025 GMT
+            Not After : Jul 28 14:32:52 2026 GMT
         Subject: OU=MySQLXConnectorPython Client Cert, CN=localhost
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:a1:01:70:b4:83:a0:af:10:12:17:b3:76:e6:63:
-                    03:65:e3:44:79:7e:a8:78:01:40:3c:90:ca:b8:38:
-                    22:9d:0a:ad:b6:f8:bf:d0:73:2a:53:17:02:ac:59:
-                    2c:7c:10:34:a7:19:01:a4:74:b4:23:4d:a1:b3:57:
-                    3c:c1:5c:f7:e3:7c:73:8b:b7:08:20:1c:13:2c:16:
-                    b5:e1:c8:8b:53:43:38:b6:38:17:7b:f3:de:8e:f7:
-                    14:be:da:0e:ec:2a:f2:d4:ad:75:fc:48:f4:c2:e5:
-                    22:4d:50:c2:db:d4:82:29:8a:f2:5e:e5:4c:fe:c4:
-                    26:27:2c:c5:d7:76:7b:c5:ef:ad:f8:70:43:0c:5f:
-                    5b:58:5a:12:84:5e:88:24:df:20:34:9e:eb:34:b2:
-                    be:12:85:b1:6b:ad:d4:6e:04:2d:39:01:5c:e4:1a:
-                    8a:5f:e1:c0:d3:e6:66:a0:0d:12:46:16:98:07:1b:
-                    c8:b7:d9:76:c5:d5:1d:67:f0:b5:17:a9:ba:38:44:
-                    8d:e3:01:fe:62:fb:8d:b1:ae:83:cc:8d:15:dd:d7:
-                    06:d7:26:7d:8e:4c:dd:ab:0f:f6:c7:d2:81:f7:04:
-                    1e:1b:9d:5a:0e:9b:77:8e:a8:83:35:0e:2c:62:5f:
-                    35:47:73:cb:d4:f3:96:65:de:21:28:ac:6e:35:53:
-                    d1:ad
+                    00:ad:cc:55:78:59:69:c2:0b:13:65:ec:84:b0:f7:
+                    23:6b:6c:af:28:9b:c8:b2:60:66:2e:e3:66:2f:92:
+                    cd:42:4b:82:13:a3:29:e4:0b:58:3b:54:63:c4:a6:
+                    a1:28:d2:85:84:23:1a:c9:9d:83:b6:69:98:15:85:
+                    e4:bf:64:1e:e5:53:6c:20:29:a0:88:c5:53:2f:61:
+                    0c:10:47:32:3e:f2:6f:d4:e8:89:d0:c4:bf:17:5b:
+                    da:ad:06:5d:6b:e9:b2:42:91:0c:41:be:ef:f1:7f:
+                    66:aa:ba:2e:c1:80:01:0b:6e:dd:34:ca:18:bc:e8:
+                    7e:b6:20:8b:43:76:ee:c7:5b:93:56:0a:4b:5f:27:
+                    a9:b8:86:18:41:dc:54:7b:f4:07:13:4e:2c:92:16:
+                    7c:d5:4a:ab:b8:25:b5:59:1c:57:d9:e4:f2:2d:4b:
+                    00:d5:24:2a:e3:e8:6e:48:23:a8:c1:bb:11:1e:cc:
+                    d3:f4:4a:a5:5a:ea:e3:aa:1a:be:ee:9d:a8:19:cf:
+                    0c:2d:17:b4:bd:c7:5e:0b:c6:a0:6c:fb:e7:47:50:
+                    1c:b0:61:05:01:8e:fb:b7:5b:d8:d6:a6:3e:ac:1f:
+                    60:07:ba:5c:8f:63:b6:7b:bc:b9:2a:44:a2:73:51:
+                    72:fc:c1:87:30:e1:82:65:d9:c9:e5:4b:54:cd:a9:
+                    b8:0f
                 Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Key Identifier: 
+                66:42:0E:77:AD:91:BA:D0:0F:32:CD:DC:C4:61:0E:77:05:FF:A4:F6
+            X509v3 Authority Key Identifier: 
+                A6:40:0D:89:1C:FC:53:BD:C5:6E:FA:90:77:5C:62:51:E4:F7:DE:31
     Signature Algorithm: sha256WithRSAEncryption
     Signature Value:
-        66:7e:5c:44:99:3c:e7:21:d8:73:2f:22:e6:e2:51:f4:c9:ab:
-        ab:e8:78:84:ff:d7:0e:7a:eb:cd:42:31:f1:68:7a:b1:2c:28:
-        e3:ac:28:a9:20:d6:31:d9:1b:3f:5a:c4:86:d6:be:ed:cd:f7:
-        38:fb:ca:75:29:01:56:62:81:8e:e7:81:f1:d9:67:9d:af:93:
-        68:d6:1e:8f:69:e6:5a:36:e8:1e:01:cd:f7:1d:94:ad:12:1a:
-        e2:41:94:92:69:00:71:5d:34:1d:7c:1f:b2:75:fa:52:71:db:
-        54:84:c8:89:a3:1b:18:27:d4:f2:3b:c7:d9:46:e0:b8:9b:ef:
-        65:0b:77:ae:4f:6e:99:c3:64:29:84:a5:cb:c3:a0:88:eb:ef:
-        6d:5b:65:14:b6:fd:4f:11:6c:4c:73:8b:47:0b:8b:aa:3c:c2:
-        69:df:8e:1c:c1:c3:c9:64:37:66:86:80:98:06:3a:1b:b4:62:
-        3e:c7:f9:36:79:21:23:7c:0a:74:d2:5b:d8:5f:66:db:25:69:
-        29:5e:a5:fa:b8:dd:0d:5e:5b:10:64:44:b7:53:5a:e5:ca:c0:
-        68:78:35:0f:3b:76:00:4e:a7:6c:5a:d3:30:65:66:bc:cb:d3:
-        bf:da:f3:bc:9b:ce:22:0a:82:db:a9:44:73:e6:0e:30:87:eb:
-        c4:09:7e:96
+        4d:0c:be:51:8b:61:30:0c:67:92:77:d8:78:29:90:f6:a4:93:
+        d5:db:12:bf:d8:43:9e:12:9f:dc:34:62:4f:2d:74:b3:6d:f6:
+        d3:68:0f:ea:c4:ac:13:04:95:b1:27:fe:64:85:31:8d:e2:d2:
+        e5:4f:6c:12:4a:d1:86:b2:6e:f5:3c:0a:e9:ab:39:78:b6:34:
+        7f:2d:70:95:92:46:69:1c:c1:88:63:93:76:d9:3a:f6:47:94:
+        3c:0f:b1:02:2a:3a:d0:8f:dd:ac:e0:99:44:3d:4f:e1:6d:94:
+        78:8c:5e:97:ea:51:70:3e:ce:8b:35:0f:00:b0:86:ec:fa:38:
+        df:ae:7f:d8:60:c5:2a:b4:f3:53:24:fa:74:c0:13:3d:87:8f:
+        be:8a:20:4b:85:c0:29:89:9d:b3:fd:ba:7c:dc:e8:fd:b1:fb:
+        b2:96:cc:22:79:c5:17:bc:1a:23:21:56:43:fb:8a:83:67:aa:
+        e5:a3:ed:66:77:93:5e:b4:e1:6a:b8:3f:34:9f:57:15:ea:59:
+        9b:ed:ce:57:9a:1c:54:ea:ed:fa:6e:ed:1b:ca:d4:ac:3a:d3:
+        fc:08:a8:5a:03:e2:7a:8d:32:36:d8:bf:2f:fb:b8:a6:a5:a5:
+        0f:d0:c6:7c:7e:44:02:48:8f:ad:b0:65:69:a9:3f:90:c7:d3:
+        3e:5c:e8:7b
 -----BEGIN CERTIFICATE-----
-MIIC9zCCAd8CAQIwDQYJKoZIhvcNAQELBQAwQzEmMCQGA1UECwwdTXlTUUxYQ29u
-bmVjdG9yUHl0aG9uIFJvb3QgQ0ExGTAXBgNVBAMMEE15Q29ublB5IFJvb3QgQ0Ew
-HhcNMjQwNzE3MTUxNjExWhcNMjUwNzE3MTUxNjExWjBAMSowKAYDVQQLDCFNeVNR
-TFhDb25uZWN0b3JQeXRob24gQ2xpZW50IENlcnQxEjAQBgNVBAMMCWxvY2FsaG9z
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKEBcLSDoK8QEhezduZj
-A2XjRHl+qHgBQDyQyrg4Ip0Krbb4v9BzKlMXAqxZLHwQNKcZAaR0tCNNobNXPMFc
-9+N8c4u3CCAcEywWteHIi1NDOLY4F3vz3o73FL7aDuwq8tStdfxI9MLlIk1QwtvU
-gimK8l7lTP7EJicsxdd2e8XvrfhwQwxfW1haEoReiCTfIDSe6zSyvhKFsWut1G4E
-LTkBXOQail/hwNPmZqANEkYWmAcbyLfZdsXVHWfwtRepujhEjeMB/mL7jbGug8yN
-Fd3XBtcmfY5M3asP9sfSgfcEHhudWg6bd46ogzUOLGJfNUdzy9TzlmXeISisbjVT
-0a0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAZn5cRJk85yHYcy8i5uJR9Mmrq+h4
-hP/XDnrrzUIx8Wh6sSwo46woqSDWMdkbP1rEhta+7c33OPvKdSkBVmKBjueB8dln
-na+TaNYej2nmWjboHgHN9x2UrRIa4kGUkmkAcV00HXwfsnX6UnHbVITIiaMbGCfU
-8jvH2UbguJvvZQt3rk9umcNkKYSly8OgiOvvbVtlFLb9TxFsTHOLRwuLqjzCad+O
-HMHDyWQ3ZoaAmAY6G7RiPsf5NnkhI3wKdNJb2F9m2yVpKV6l+rjdDV5bEGREt1Na
-5crAaHg1Dzt2AE6nbFrTMGVmvMvTv9rzvJvOIgqC26lEc+YOMIfrxAl+lg==
+MIIDQDCCAiigAwIBAgIBAjANBgkqhkiG9w0BAQsFADBDMSYwJAYDVQQLDB1NeVNR
+TFhDb25uZWN0b3JQeXRob24gUm9vdCBDQTEZMBcGA1UEAwwQTXlDb25uUHkgUm9v
+dCBDQTAeFw0yNTA3MjgxNDMyNTJaFw0yNjA3MjgxNDMyNTJaMEAxKjAoBgNVBAsM
+IU15U1FMWENvbm5lY3RvclB5dGhvbiBDbGllbnQgQ2VydDESMBAGA1UEAwwJbG9j
+YWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArcxVeFlpwgsT
+ZeyEsPcja2yvKJvIsmBmLuNmL5LNQkuCE6Mp5AtYO1RjxKahKNKFhCMayZ2DtmmY
+FYXkv2Qe5VNsICmgiMVTL2EMEEcyPvJv1OiJ0MS/F1varQZda+myQpEMQb7v8X9m
+qrouwYABC27dNMoYvOh+tiCLQ3bux1uTVgpLXyepuIYYQdxUe/QHE04skhZ81Uqr
+uCW1WRxX2eTyLUsA1SQq4+huSCOowbsRHszT9EqlWurjqhq+7p2oGc8MLRe0vcde
+C8agbPvnR1AcsGEFAY77t1vY1qY+rB9gB7pcj2O2e7y5KkSic1Fy/MGHMOGCZdnJ
+5UtUzam4DwIDAQABo0IwQDAdBgNVHQ4EFgQUZkIOd62RutAPMs3cxGEOdwX/pPYw
+HwYDVR0jBBgwFoAUpkANiRz8U73FbvqQd1xiUeT33jEwDQYJKoZIhvcNAQELBQAD
+ggEBAE0MvlGLYTAMZ5J32HgpkPakk9XbEr/YQ54Sn9w0Yk8tdLNt9tNoD+rErBME
+lbEn/mSFMY3i0uVPbBJK0YaybvU8CumrOXi2NH8tcJWSRmkcwYhjk3bZOvZHlDwP
+sQIqOtCP3azgmUQ9T+FtlHiMXpfqUXA+zos1DwCwhuz6ON+uf9hgxSq081Mk+nTA
+Ez2Hj76KIEuFwCmJnbP9unzc6P2x+7KWzCJ5xRe8GiMhVkP7ioNnquWj7WZ3k160
+4Wq4PzSfVxXqWZvtzleaHFTq7fpu7RvK1Kw60/wIqFoD4nqNMjbYvy/7uKalpQ/Q
+xnx+RAJIj62wZWmpP5DH0z5c6Hs=
 -----END CERTIFICATE-----
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_client_key.pem 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_client_key.pem
--- 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_client_key.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_client_key.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChAXC0g6CvEBIX
-s3bmYwNl40R5fqh4AUA8kMq4OCKdCq22+L/QcypTFwKsWSx8EDSnGQGkdLQjTaGz
-VzzBXPfjfHOLtwggHBMsFrXhyItTQzi2OBd7896O9xS+2g7sKvLUrXX8SPTC5SJN
-UMLb1IIpivJe5Uz+xCYnLMXXdnvF7634cEMMX1tYWhKEXogk3yA0nus0sr4ShbFr
-rdRuBC05AVzkGopf4cDT5magDRJGFpgHG8i32XbF1R1n8LUXqbo4RI3jAf5i+42x
-roPMjRXd1wbXJn2OTN2rD/bH0oH3BB4bnVoOm3eOqIM1DixiXzVHc8vU85Zl3iEo
-rG41U9GtAgMBAAECggEAJBeZz4l7RYstdx0ur/YtrpMsCC1FsEMdhoYxv2qsDba1
-WuE3xI9wgzhTC9Ygo/4RA41WQiq8L/bI4xZRAwqncho1n7IL0wDgJl+/7YmCfAuD
-ZMu9rfZs43ENeDwTIMt+7ICnBINJRQBO+HR8fgGNHSlt7CpsYGcRo3IEtqhzlhrp
-sUAP+OmEFKsEZj1XwaSe5HDyn0vZ32i0kqKf8Bbha159TaFefnHKdX5AuOmfb6Bf
-iqu2oi/NAUAjlX6TGKKrEjMWbaWSkmzgVeihhAY0Vf85asIDXqxQhq1UVTbVNajP
-Mt1SXCgJJ51wU2z+nvdbWLDKRxvydAx3ErGvXToi0QKBgQDUJz933AYwJREwfj+q
-JvVbA5ouBX97x7rLXIk7/Pjq5SCtgBuymA2i9YZ9LccgTLmEt/3sIyGBUFZOS+Sd
-SuzVrfLDlgQ1r9vgM5NsxvqFj5f8Nd1evcRLzuRF3lgM48gboyYD2PRLlj5GY/J9
-1HmdokbVwVYI5bHlUvd0FziH8QKBgQDCSAkiVVsHbn6J6ICClmVOfS7fUzgH0j4j
-GTlzy/WhNoWc6c5WWTHK6Q6bGoEmgvCgOzm8pFvlvYvu5TlvvMfFcVeEPy6HDdu+
-rX+8UxS4aBQJi6zRNSToC8DJVBniEP/Q+IrDGLc4LJfx/G9co3GT5d+fsBqoKDue
-QTMJBsmBfQKBgQDCBncMRoS+SVg0MnJFSkYAjAXY6xxRdzQFwsabv1tjcFP3eX9b
-Uaa/D6+FEnXXu3O7xo4LBYIiAvg7uTsHA7wgHGs2px+IfiIoJONCi6QYvF+ywQyJ
-FiLNdhTdNWDvwO6FICunPycFbg3cUJI4tDbZjM0dtyjZEEEnSz6WxJnl8QKBgCJP
-gn1zwY3Ab8x/KSLm2KFR7lM2aTDIanzcWY8fuBNug45ApFYPjoGdQx0VQzW/7ir+
-CqZMCIa8QNhB1zDqkAVIjQIn/lmPkv1LusFRktk2WEOPTUftMMViPfvQRHnuMp9/
-JVJrLQBYr8TmpewgWVCbSjDzcuG7qTu7m/2+GxwpAoGAWxrWCXJbWMc52s6PNYMZ
-v2BPmei12xGc3epofnBrSsXOS/+4yRJ+Sg9wC58kd7uOP08n8dFL1ndFdhTbbM2l
-tV6+sH5AwcRcwDrYw3D3Ld688n0rsAJnYRmsEE3esCJs5bgbp2H5n/iaTvVAFn/B
-fyZFemBuOab7a3P19jDAdOA=
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCtzFV4WWnCCxNl
+7ISw9yNrbK8om8iyYGYu42Yvks1CS4IToynkC1g7VGPEpqEo0oWEIxrJnYO2aZgV
+heS/ZB7lU2wgKaCIxVMvYQwQRzI+8m/U6InQxL8XW9qtBl1r6bJCkQxBvu/xf2aq
+ui7BgAELbt00yhi86H62IItDdu7HW5NWCktfJ6m4hhhB3FR79AcTTiySFnzVSqu4
+JbVZHFfZ5PItSwDVJCrj6G5II6jBuxEezNP0SqVa6uOqGr7unagZzwwtF7S9x14L
+xqBs++dHUBywYQUBjvu3W9jWpj6sH2AHulyPY7Z7vLkqRKJzUXL8wYcw4YJl2cnl
+S1TNqbgPAgMBAAECggEABY/S4GRfjjG4QjMvDZtPprja9iK5jnzwsVcnodyvh3lz
+acblFnB0yauOscuodqT5fJLoKh9JmsU+BpEoyZMwPMiFFbr6uqEyh96fnqLhyJ2g
+H/yPX+zSyB/fG34d8BkkCR2ZMT6TKAYIbTX5he5NLIrrkix6pnj79j6wqIPnakvG
+QDL2cq1B5ifzAliirbjKPtwxbACQ6gB1tXFNObkWnLh3Yyoq8urYreJphvF8e6nv
+4Ca5zZldcWtd3xbBmD5HEcSgm/uVKy6gvyQcn+aw4MsUX092mOAvubG0ZoMcY0d0
+eFg0mkUn4XKkOFgu8VeaeUYvJl8UI+PYcL1qiXdlqQKBgQDkwaGsCSAa3XCVPgAg
+PZo6UQZszHW8zzW7C6yPE2LMEgXT/P/7vSpWKQR/tPdelUOCXnClZ/UY8MTqNSf4
+8+XK2SZzsvyw4II1ko6oiQFY+bYjDYfwnz3yvWk92NeUi4mhZAUStqSXxSsSllwR
+3p8ZF2j3k87OZe+T+H9/uEtX3QKBgQDCfyBVsG032DDDjNKlMem3LdnbwLZHN5fy
+1Jh9htDIv4be+GzeojFvpI8nIjYSjBPw6e1so2sYmoaYU55PUTTV5+LpsjaikwdV
+WdkwcFReV9whWJWSqPKJoJ17PwNxUhMHZVJNXQEwkLNhZ6e26gEIwbXnjYaZntwH
+S58Wu4nm2wKBgQCKIRXTgMsfDbmOlJqU3T3EmuprReaONPy3zivLVSRiHzvfrrSP
+uMDYt/ncd1Sriyvxi78vUZ+hCLmOxrw1SmjmXMsoL9r/nwFhAfccc2YZ6Ob/MYt1
+U2KfsZnb25UJQFzB1Fhv3VNzxX3lwl8j9y5Qg19Bp8HHxautyO6MG6d7DQKBgQCP
+ABsNBZd3vLs1u79QeB9HcC3CtbEPMZ/FiWvItyugvbjzDSI2mnfQhuQ9uJibEGTE
+96l5+7kNMOgO7UPzO1imgUTD4CTtaT62EUZvp9dQOjb+SXxHhXI1oGLJL+5fDiIx
+iNx3Rw9N3sYUsrqL8QbrokkVQ2gYYMWTk5UXiLF+iwKBgQCeJgvxn/fsUw0BLmBI
+a8SEc70h8MRocg/1gVlu7pY6kSS958vUQnrNMdyHMtEUFeNVEDIkqKY84P4M+dYl
+tobuYIb3pMn4+LkaN9akMxX7iN11ZhYocVJS1QQqlaYlskn5THd61wPPu8Qz9l5/
+6yzozhDmq2TGgknnYK3Dn+E4AQ==
 -----END PRIVATE KEY-----
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_server_cert.pem 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_server_cert.pem
--- 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_server_cert.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_server_cert.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,68 +1,75 @@
 Certificate:
     Data:
-        Version: 1 (0x0)
+        Version: 3 (0x2)
         Serial Number: 1 (0x1)
         Signature Algorithm: sha256WithRSAEncryption
         Issuer: OU=MySQLXConnectorPython Root CA, CN=MyConnPy Root CA
         Validity
-            Not Before: Jul 17 15:16:10 2024 GMT
-            Not After : Jul 17 15:16:10 2025 GMT
+            Not Before: Jul 28 14:32:52 2025 GMT
+            Not After : Jul 28 14:32:52 2026 GMT
         Subject: OU=MySQLXConnectorPython Server Cert, CN=localhost
         Subject Public Key Info:
             Public Key Algorithm: rsaEncryption
                 Public-Key: (2048 bit)
                 Modulus:
-                    00:aa:f0:4a:53:b5:fe:31:d1:d8:7e:ed:24:17:a1:
-                    39:00:d0:ad:3a:a4:cf:0a:8c:df:43:08:7b:f3:e1:
-                    30:bf:68:26:a2:41:fe:60:78:2a:fd:68:55:76:b5:
-                    5c:32:d5:a7:cd:24:c8:ee:b0:ba:5f:29:4d:14:77:
-                    bd:38:20:a2:8f:ae:3e:46:09:bf:88:2d:8a:a6:7b:
-                    86:fe:fd:f1:7e:40:77:50:90:46:7c:02:e2:86:66:
-                    b8:da:3f:da:81:f0:eb:a0:ec:60:f4:ef:0a:9c:d2:
-                    d1:60:96:07:72:a8:42:3b:06:de:5d:e1:46:71:af:
-                    0c:bd:6d:25:f8:97:36:62:20:63:cb:58:55:f7:fa:
-                    eb:2e:eb:ae:62:33:8c:23:83:1d:ce:18:b7:ac:73:
-                    e4:e3:55:93:11:62:38:8b:f0:e1:2b:1b:00:89:b3:
-                    e7:8a:e4:95:b8:b4:52:9f:e7:4f:88:4a:a4:19:b6:
-                    c1:ad:01:f6:cc:50:10:f1:8b:86:c9:2e:4a:12:7a:
-                    98:e5:31:2e:37:8a:ba:20:42:0e:17:6e:a5:03:88:
-                    fd:6b:e7:6d:1d:ad:49:04:08:1c:05:8a:dc:1c:7a:
-                    d3:17:bf:35:cd:c2:b2:c3:2c:80:74:2e:57:bb:94:
-                    1e:d3:de:b0:6f:c3:f0:97:61:29:2e:e9:72:91:63:
-                    f7:ed
+                    00:c7:6c:e7:f2:83:cc:4c:14:8e:85:9e:d7:d1:e1:
+                    3b:5e:b5:74:ed:e7:ee:5b:db:43:27:a0:ba:95:4c:
+                    85:86:4d:e5:6d:21:b5:c6:79:a7:47:c2:56:c7:88:
+                    c0:1c:06:e5:68:40:f4:4d:7c:8c:27:de:ff:ab:16:
+                    dd:26:8c:a6:c6:70:ec:2f:48:d3:20:cf:58:b4:31:
+                    54:4d:55:ab:72:8a:ac:fb:52:dd:46:35:53:3a:a9:
+                    17:88:61:80:29:08:a6:f7:33:ed:72:92:36:1b:a8:
+                    6e:9e:ec:5e:41:12:38:a9:ec:90:eb:fb:2c:b0:b8:
+                    80:6c:18:9e:5c:58:2c:10:6b:68:04:d3:42:8d:e7:
+                    1f:d4:f2:f2:65:2e:f1:2e:6b:ad:a9:d5:13:f9:7e:
+                    77:b8:7c:49:6c:c6:13:c8:8c:a4:9c:1c:b7:3f:f1:
+                    b3:c1:fa:6d:76:8f:10:9d:76:42:91:87:57:b7:6e:
+                    3d:9d:ff:d8:f0:04:e3:2a:4a:bc:d2:e9:5d:cb:25:
+                    95:73:eb:83:03:12:05:89:42:d2:ec:67:2c:7c:4a:
+                    0e:58:54:ae:2e:ca:1b:c8:b3:4c:d3:65:d0:3d:a1:
+                    39:e2:d8:ec:34:6c:8b:4e:0e:7f:55:20:ac:b4:24:
+                    11:0c:90:64:29:c8:c0:59:04:46:08:c8:52:ca:04:
+                    e4:5b
                 Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Subject Key Identifier: 
+                DE:EF:C6:9C:0F:E2:F4:C3:9C:44:E5:F2:94:0E:EF:BD:46:3E:BC:DB
+            X509v3 Authority Key Identifier: 
+                A6:40:0D:89:1C:FC:53:BD:C5:6E:FA:90:77:5C:62:51:E4:F7:DE:31
     Signature Algorithm: sha256WithRSAEncryption
     Signature Value:
-        43:fe:2d:21:8f:74:b7:ac:cf:81:5f:1d:5b:e1:00:31:41:ed:
-        7c:ad:0f:6f:f9:c9:09:81:96:73:6b:2c:08:39:e1:7e:9a:bc:
-        60:6a:a3:3e:fc:10:1c:07:1a:94:e7:39:46:c2:f1:9e:37:23:
-        7d:12:ec:d8:77:a7:21:80:42:0f:2d:9b:00:67:5e:47:44:7e:
-        40:fd:db:ef:a1:27:57:f0:3d:ce:fe:8b:bf:78:ec:66:3e:80:
-        0d:0b:80:02:fb:d1:1f:a7:5c:3a:79:ae:dd:ca:55:89:c2:f1:
-        9e:2a:d1:ff:7d:0a:0b:48:29:8b:24:dd:ba:b9:3e:20:7d:1e:
-        63:0e:f7:c5:35:94:17:b2:11:93:c3:6a:62:59:d6:a0:22:fa:
-        7c:3d:5d:ba:33:e9:61:30:d2:d1:cf:54:ef:08:55:62:43:28:
-        99:a6:06:40:0d:22:e4:1e:37:ad:bb:5e:68:27:fb:69:e3:57:
-        d1:aa:62:46:12:2a:27:eb:c6:4e:8a:46:55:e5:22:b9:76:f8:
-        26:00:b5:f0:58:7c:66:08:10:f6:86:01:87:18:1c:ab:77:3b:
-        0a:db:38:16:1b:5e:b7:fd:84:7e:1a:21:0f:c4:ee:68:2f:b9:
-        96:d3:08:07:6a:e8:35:5d:bc:b6:16:59:f7:49:55:76:cd:58:
-        5a:dc:74:26
+        1a:43:3a:d5:a5:f5:53:6a:ca:89:c7:47:5d:f9:91:cf:d5:07:
+        d1:b5:4d:20:22:27:6b:98:2e:19:ae:03:bb:f2:d2:2b:0e:f6:
+        f7:8b:0a:cc:96:1e:94:bb:23:d0:cc:19:37:1a:e7:75:30:61:
+        ee:d8:d2:4a:d8:7d:d3:7d:8d:b4:39:e8:55:a7:38:8d:c4:b6:
+        25:70:dd:c2:bc:ef:bb:c7:f4:bd:f5:f4:20:c7:d2:39:31:f5:
+        30:77:6d:99:b5:22:9d:d6:98:37:0f:33:b6:5e:e3:75:c9:81:
+        86:eb:08:ab:1d:35:af:b8:f6:c0:6a:d3:84:71:b0:6a:6d:3f:
+        05:eb:b2:a7:13:b0:5f:06:2c:70:cc:65:e7:e1:c4:4d:8b:6f:
+        b6:7b:a2:a4:ca:d1:12:a9:85:8a:ae:c2:97:14:c1:d3:b3:ab:
+        e2:dc:43:a9:b0:55:b3:1d:d9:6c:e7:90:b2:3e:b8:1b:fe:30:
+        1a:be:1d:c4:a9:93:bc:83:03:7b:df:7c:f5:a7:7a:c1:54:7e:
+        2a:3c:a0:72:88:ce:b5:ca:98:e8:ce:b0:29:9b:bb:38:73:c7:
+        cd:dc:ee:1c:f3:03:d4:d2:db:14:4d:b4:b2:93:4e:0a:18:89:
+        99:54:15:30:b0:14:f0:0c:d0:be:e9:88:f2:b4:3b:93:4c:e7:
+        3b:46:1f:c4
 -----BEGIN CERTIFICATE-----
-MIIC9zCCAd8CAQEwDQYJKoZIhvcNAQELBQAwQzEmMCQGA1UECwwdTXlTUUxYQ29u
-bmVjdG9yUHl0aG9uIFJvb3QgQ0ExGTAXBgNVBAMMEE15Q29ublB5IFJvb3QgQ0Ew
-HhcNMjQwNzE3MTUxNjEwWhcNMjUwNzE3MTUxNjEwWjBAMSowKAYDVQQLDCFNeVNR
-TFhDb25uZWN0b3JQeXRob24gU2VydmVyIENlcnQxEjAQBgNVBAMMCWxvY2FsaG9z
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKrwSlO1/jHR2H7tJBeh
-OQDQrTqkzwqM30MIe/PhML9oJqJB/mB4Kv1oVXa1XDLVp80kyO6wul8pTRR3vTgg
-oo+uPkYJv4gtiqZ7hv798X5Ad1CQRnwC4oZmuNo/2oHw66DsYPTvCpzS0WCWB3Ko
-QjsG3l3hRnGvDL1tJfiXNmIgY8tYVff66y7rrmIzjCODHc4Yt6xz5ONVkxFiOIvw
-4SsbAImz54rklbi0Up/nT4hKpBm2wa0B9sxQEPGLhskuShJ6mOUxLjeKuiBCDhdu
-pQOI/WvnbR2tSQQIHAWK3Bx60xe/Nc3CssMsgHQuV7uUHtPesG/D8JdhKS7pcpFj
-9+0CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAQ/4tIY90t6zPgV8dW+EAMUHtfK0P
-b/nJCYGWc2ssCDnhfpq8YGqjPvwQHAcalOc5RsLxnjcjfRLs2HenIYBCDy2bAGde
-R0R+QP3b76EnV/A9zv6Lv3jsZj6ADQuAAvvRH6dcOnmu3cpVicLxnirR/30KC0gp
-iyTdurk+IH0eYw73xTWUF7IRk8NqYlnWoCL6fD1dujPpYTDS0c9U7whVYkMomaYG
-QA0i5B43rbteaCf7aeNX0apiRhIqJ+vGTopGVeUiuXb4JgC18Fh8ZggQ9oYBhxgc
-q3c7Cts4Fhtet/2EfhohD8TuaC+5ltMIB2roNV28thZZ90lVds1YWtx0Jg==
+MIIDQDCCAiigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMSYwJAYDVQQLDB1NeVNR
+TFhDb25uZWN0b3JQeXRob24gUm9vdCBDQTEZMBcGA1UEAwwQTXlDb25uUHkgUm9v
+dCBDQTAeFw0yNTA3MjgxNDMyNTJaFw0yNjA3MjgxNDMyNTJaMEAxKjAoBgNVBAsM
+IU15U1FMWENvbm5lY3RvclB5dGhvbiBTZXJ2ZXIgQ2VydDESMBAGA1UEAwwJbG9j
+YWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2zn8oPMTBSO
+hZ7X0eE7XrV07efuW9tDJ6C6lUyFhk3lbSG1xnmnR8JWx4jAHAblaED0TXyMJ97/
+qxbdJoymxnDsL0jTIM9YtDFUTVWrcoqs+1LdRjVTOqkXiGGAKQim9zPtcpI2G6hu
+nuxeQRI4qeyQ6/sssLiAbBieXFgsEGtoBNNCjecf1PLyZS7xLmutqdUT+X53uHxJ
+bMYTyIyknBy3P/Gzwfptdo8QnXZCkYdXt249nf/Y8ATjKkq80uldyyWVc+uDAxIF
+iULS7GcsfEoOWFSuLsobyLNM02XQPaE54tjsNGyLTg5/VSCstCQRDJBkKcjAWQRG
+CMhSygTkWwIDAQABo0IwQDAdBgNVHQ4EFgQU3u/GnA/i9MOcROXylA7vvUY+vNsw
+HwYDVR0jBBgwFoAUpkANiRz8U73FbvqQd1xiUeT33jEwDQYJKoZIhvcNAQELBQAD
+ggEBABpDOtWl9VNqyonHR135kc/VB9G1TSAiJ2uYLhmuA7vy0isO9veLCsyWHpS7
+I9DMGTca53UwYe7Y0krYfdN9jbQ56FWnOI3EtiVw3cK877vH9L319CDH0jkx9TB3
+bZm1Ip3WmDcPM7Ze43XJgYbrCKsdNa+49sBq04RxsGptPwXrsqcTsF8GLHDMZefh
+xE2Lb7Z7oqTK0RKphYquwpcUwdOzq+LcQ6mwVbMd2WznkLI+uBv+MBq+HcSpk7yD
+A3vffPWnesFUfio8oHKIzrXKmOjOsCmbuzhzx83c7hzzA9TS2xRNtLKTTgoYiZlU
+FTCwFPAM0L7piPK0O5NM5ztGH8Q=
 -----END CERTIFICATE-----
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_server_key.pem 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_server_key.pem
--- 9.4.0-1/mysqlx-connector-python/tests/data/ssl/tests_server_key.pem	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/data/ssl/tests_server_key.pem	2025-10-15 05:27:11.000000000 +0000
@@ -1,28 +1,28 @@
 -----BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCq8EpTtf4x0dh+
-7SQXoTkA0K06pM8KjN9DCHvz4TC/aCaiQf5geCr9aFV2tVwy1afNJMjusLpfKU0U
-d704IKKPrj5GCb+ILYqme4b+/fF+QHdQkEZ8AuKGZrjaP9qB8Oug7GD07wqc0tFg
-lgdyqEI7Bt5d4UZxrwy9bSX4lzZiIGPLWFX3+usu665iM4wjgx3OGLesc+TjVZMR
-YjiL8OErGwCJs+eK5JW4tFKf50+ISqQZtsGtAfbMUBDxi4bJLkoSepjlMS43irog
-Qg4XbqUDiP1r520drUkECBwFitwcetMXvzXNwrLDLIB0Lle7lB7T3rBvw/CXYSku
-6XKRY/ftAgMBAAECggEABzTLwAgEmCoTY+pwYpSijWUUCyGxNBh96FqztbN7ysiZ
-FFm5imyWd19jdvaCAAdKJIJVUYa0HK3mOM4sH8Z0bp/hsoctArsqGgb2yR+Ag5oz
-zXrU6zEd8UeO/xhrsvL/+U/twyBOr2TN0dy790/zltRydxJiVgmTUmsHC5n9qhjy
-AsJnESqgAw8mkWIwA8qs3A7/tu/mZmmBjsxCoK4p+zI9kCiso52biGPrb3h6rn5I
-+ffUK1czjXPmMg1CEEM2s6wet2BHipmd2yjobbOZ5Igx68IDLpaooFj64DwXxnD8
-35VtdF2dr3LH0eA3UC5AYCNrQkE9hVy5cEGmlgnCMQKBgQDuKEaWZqE8K3hKyPez
-So6E/wJfBtYmXRLATlHbvEocN1wOA1kfJs88R/OBgOhAPZQwzd0ZNe6vQTIb/EQt
-nIOIUpe+FFXhffVBvl3Ic3j45LPQnxXTd/lVNaShu3KlIUTokHozPl/eZKSRWzQj
-+DJJw5kKaRIP9L+7xtd0DbTChQKBgQC3vsw1cDztcr/Z93WROXER0JFHXz8zieYb
-FaueZ0aHTQRqzgzgLWRbnjzLbsiAKvrxeUVcYHaSrNlkKxYyoGsKvn9RppbdFSWO
-60uT/RBBsJeD318/7dY/OsoHqpnvjcmVqXqf9bCgiUvKCP2NIF/ZsPYArSfqD75+
-iODqTB6ASQKBgDtiw6dBVDdCx64uSsXkc4FqbVbwx3mtf72ASh026Gv8yfGcmB6S
-eN6ZOnkygbdzI36/9sAQmMIOycX8s6uD+bCGl9wICho+ZGfOZmhTkvjNXqFI6hJf
-OkcrJzBFI6NVlm8/h5k7loBILFkqmufVPgTyxzi3Vo+wAhd6z8LaoBZZAoGACT5n
-BZU063knX67MUlcCcjP86wtGobAhTGGFtb1aVfow67KcATcnYliOlGlpWtFOuJEy
-RRhxPqXFdf2Y60kYuXyl6RSpaEvlDNCXh8VmaPeaV78ICq5LZfjuKv6RKfUHHClf
-iuaQUTM3Bd33636ic9AsQBJ1/Jd4LONz9TWJH0kCgYEA3+4tU1T6oM2vQcx25Cf6
-CVls/nPli+1ogrZCUuFVQbZvLRNmDyGRGV3wbBGVUMR7WTtmkHgqjRZ4i7Ywx5wx
-BMtLFSYs94+QzIht3J6K6Mfrp7biqdPLFjfzBvrkm6Cz4IT8Tr+2/O5mVg90Zczc
-MSx0xq8mw27A01c9FsNDysI=
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDHbOfyg8xMFI6F
+ntfR4TtetXTt5+5b20MnoLqVTIWGTeVtIbXGeadHwlbHiMAcBuVoQPRNfIwn3v+r
+Ft0mjKbGcOwvSNMgz1i0MVRNVatyiqz7Ut1GNVM6qReIYYApCKb3M+1ykjYbqG6e
+7F5BEjip7JDr+yywuIBsGJ5cWCwQa2gE00KN5x/U8vJlLvEua62p1RP5fne4fEls
+xhPIjKScHLc/8bPB+m12jxCddkKRh1e3bj2d/9jwBOMqSrzS6V3LJZVz64MDEgWJ
+QtLsZyx8Sg5YVK4uyhvIs0zTZdA9oTni2Ow0bItODn9VIKy0JBEMkGQpyMBZBEYI
+yFLKBORbAgMBAAECggEADQ/Uh11bkbYc+aKER0Jl1Zez/2scARc06FEON34qFrhe
+aQ32rnfEXZ5cebg6wPswpmnutm6MbYYdH9MhDAfVWpUF2zj9Xx5FlJPQjjoovxlX
+KCTuykzu1R5DJNMiBk4DRZi4mjL6aUhYan9X0xJC9NpCSbqLXE3RV4MrSCgcRrzs
+eTcZBQ4ne7yQ9piupvBA3AQe3mwG8Yzw+kyD5AeSvqeG08tlfTzKD3I7FcH3lp3X
+1gC5b/POQYBCKlyL22Kg1hIwDuPJwrT5fjl4TCel/HvOjwwVYNVSfjyoLc/HySIE
+4/Qiedj9whScj2rJKS8xYXa58UcCEibECgAInO4M2QKBgQD4fGAFplR5xSbk4wSG
+/SvuiJJ3CHPUhfwJyNe+9BS9cfwIMQ6Rnx5RZJeA0myRoIwRKMHiixP6nQjFwA/d
+DNzcIHLMDAC5inKXrT9TpUrO0dAwiyFDAAkVB0XaupLIh28OWC4jMLqVj3w8UM9u
+Uj7bSjbIje96f6ubVRWN4Q5AWQKBgQDNdLw4z2ihedymePj9OZMDunlHarYMN3zY
+9SjbC22Ca759TNa2JuYNNL+84X0hp2QnSTC6ViZU/L8BQhw06YjuDHHzmIgx5jH6
+1XxDwC5Wrif6y3Z8sQ2VUaAdLEyCPriYQ9gss7EHe5Ml4a0kgDr/JoHXAkgPqFU5
+6K7iypFT0wKBgQCwVTqi57zsyM5oAP3WeVSyqjIdzF6+QvJvUxpfBMCvC3NJsN5g
+0mTmZ5bnsOugkCi1iJHGHOHpp4RxKHFZcWZNw60TRbVB9ZCKOERHLHYgvF2cBS9u
+Z1kKliWpKVs+eHWD3WmoSU0vEyqbdtEsvaqjXU/xFGAMMwtpaICqNToyyQKBgQCE
+ciSEWvCQaAaeKo4Yb+0eEi/sohYJehu5oRFdY9iMoviBve8MLbdP/Bk+of4Qm+As
+kzoeZTsAvo5DOWMFmSb0joFHD6V8xXCiysz4wAMfTdXoDxGrAFhJUf1t0QjhTZ2i
+Stootw4ATOFnIjyDs0ZVBXXeLVJXBaUrV5ymBv/4kQKBgQDS9GQj6nADz/24/b1m
+nUN+cwYnqbMqbpKiqJBPdvpAZ+vssB6OjQC1jNDotoRCga3HUh+JvnQzgpgTCEq5
+CDaoea2UZBM1gQ4xEKPknfPJdWOHakxHcPW2+1qFQVTod7NEwBthWMAI6Wl+/6OJ
+xwPq2mUczhC1eKi4baicl1H0yw==
 -----END PRIVATE KEY-----
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/docker/Dockerfile 9.5.0-1/mysqlx-connector-python/tests/docker/Dockerfile
--- 9.4.0-1/mysqlx-connector-python/tests/docker/Dockerfile	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/docker/Dockerfile	2025-10-15 05:27:11.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2009, 2024, Oracle and/or its affiliates.
+# Copyright (c) 2009, 2025, Oracle and/or its affiliates.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License, version 2.0, as
@@ -26,10 +26,10 @@
 # along with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
 
-# By default the container will use oracle linux 9 from OCR.
+# By default the container will use oracle linux 10 from OCR.
 # The BASE_IMAGE environment variable can be used to pull
 # any other Oracle Linux image from any other Docker registry.
-ARG BASE_IMAGE=container-registry.oracle.com/os/oraclelinux:9-slim
+ARG BASE_IMAGE=container-registry.oracle.com/os/oraclelinux:10-slim
 
 
 FROM ${BASE_IMAGE} as pure_python
@@ -58,27 +58,37 @@ ENV PIP_INDEX_URL=${PYPI_REPOSITORY:-htt
 COPY . .
 RUN cd mysqlx-connector-python \
     && pip install -r tests/requirements.txt \
-    && pip install --use-feature=in-tree-build .
+    && pip install .
 
 
 FROM pure_python AS c_extension
-RUN dnf install -y wget gzip
+RUN dnf install -y git cmake
+RUN mkdir /tools /install
+ENV DIR_CONNECTOR=/connector-python
+ENV DIR_TOOLS=/tools
+ENV DIR_INSTALL=/install
+# Abseil: https://github.com/abseil/abseil-cpp
 # Install Protobuf C++: https://github.com/protocolbuffers/protobuf
-ENV PROTO_VERSION="3.19.6"
-ENV PROTO_ENDPOINT="protobuf-cpp-${PROTO_VERSION}.tar.gz"
-ENV PROTO_URI="https://github.com/protocolbuffers/protobuf/releases/download"
-RUN wget ${PROTO_URI}/v${PROTO_VERSION}/${PROTO_ENDPOINT} \
-    && tar xvf ${PROTO_ENDPOINT} \
-    && cd protobuf-${PROTO_VERSION} \
-    && ./configure --disable-shared --with-pic \
-    && make \
-    && make install \
+ENV ABSEIL_VERSION="20230802.1"
+ENV PROTOBUF_VERSION="v5.29.4"
+RUN cd $DIR_TOOLS \
+    && git clone --branch ${PROTOBUF_VERSION} https://github.com/protocolbuffers/protobuf.git \
+    && cd protobuf/third_party \
+    && git clone --branch ${ABSEIL_VERSION} https://github.com/abseil/abseil-cpp.git \
     && cd .. \
-    && rm -f ${PROTO_ENDPOINT} \
-    && rm -rf protobuf-${PROTO_VERSION}
-# Build mysqlx cext
-RUN cd mysqlx-connector-python \
-    && python setup.py install \
-    --with-protobuf-include-dir=/usr/local/include \
-    --with-protobuf-lib-dir=/usr/local/lib \
-    --with-protoc=/usr/local/bin/protoc
+    && cmake . -DCMAKE_CXX_STANDARD=14 \
+                -Dprotobuf_BUILD_TESTS=OFF \
+                -Dprotobuf_ABSL_PROVIDER=module \
+                -DCMAKE_PREFIX_PATH=${DIR_TOOLS}/protobuf \
+                -DCMAKE_INSTALL_PREFIX=${DIR_INSTALL}/protobuf \
+                -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
+                -Dprotobuf_MSVC_STATIC_RUNTIME=OFF \
+    && make -j$(nproc) \
+    && make install
+# Build protobuf cext
+RUN rm -rf ${DIR_TOOLS} \
+    && cd ${DIR_CONNECTOR} \
+    && cd mysqlx-connector-python \
+    && python setup.py install --with-protobuf-include-dir=${DIR_INSTALL}/protobuf/include \
+                               --with-protobuf-lib-dir=${DIR_INSTALL}/protobuf/lib64 \
+                               --with-protoc=${DIR_INSTALL}/protobuf/bin/protoc
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/qa/__init__.py 9.5.0-1/mysqlx-connector-python/tests/qa/__init__.py
--- 9.4.0-1/mysqlx-connector-python/tests/qa/__init__.py	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/qa/__init__.py	2025-10-15 05:27:11.000000000 +0000
@@ -0,0 +1,27 @@
+# Copyright (c) 2021, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
diff -pruN 9.4.0-1/mysqlx-connector-python/tests/requirements.txt 9.5.0-1/mysqlx-connector-python/tests/requirements.txt
--- 9.4.0-1/mysqlx-connector-python/tests/requirements.txt	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/mysqlx-connector-python/tests/requirements.txt	2025-10-15 05:27:11.000000000 +0000
@@ -1,4 +1,32 @@
+# Copyright (c) 2023, 2025, Oracle and/or its affiliates.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0, as
+# published by the Free Software Foundation.
+#
+# This program is designed to work with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an
+# additional permission to link the program and your derivative works
+# with the separately licensed software that they have either included with
+# the program or referenced in the documentation.
+#
+# Without limiting anything contained in the foregoing, this file,
+# which is part of MySQL Connector/Python, is also subject to the
+# Universal FOSS Exception, version 1.0, a copy of which can be found at
+# http://oss.oracle.com/licenses/universal-foss-exception.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+
 protobuf==5.29.4
 dnspython==2.6.1
 lz4==4.4.4
-zstandard>=0.12.0,<=0.19.0
+zstandard>=0.12.0,<=0.19.0 ; python_version < "3.14"
diff -pruN 9.4.0-1/pyproject.toml 9.5.0-1/pyproject.toml
--- 9.4.0-1/pyproject.toml	2025-07-10 15:10:22.000000000 +0000
+++ 9.5.0-1/pyproject.toml	2025-10-15 05:27:11.000000000 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2022, 2024, Oracle and/or its affiliates.
+# Copyright (c) 2022, 2025, Oracle and/or its affiliates.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License, version 2.0, as
@@ -53,7 +53,7 @@ skip_glob = [
 
 [tool.black]
 line-length = 88
-target-version = ['py39']
+target-version = ['py310']
 exclude = '''
 (
   /(
@@ -132,12 +132,12 @@ disable = [
 ]
 
 [tool.pylint.format]
-good-names = ["i", "f", "db", "dt", "ca", "hi", "pw"]
+good-names = ["i", "f", "db", "dt", "ca", "hi", "pw", "X"]
 
 [tool.mypy]
 # https://mypy.readthedocs.io/en/stable/command_line.html
 # https://mypy.readthedocs.io/en/stable/config_file.html#using-a-pyproject-toml-file
-python_version = 3.9
+python_version = "3.10"
 disallow_untyped_defs = true
 show_error_codes = true
 warn_unused_ignores = true
@@ -191,3 +191,12 @@ module = [
   'lib.mysql.opentelemetry.*',
 ]
 ignore_errors = true
+
+[tool.pylint.typecheck]
+ignored-modules = [
+  'numpy*',
+  'pandas*',
+  'sklearn*',
+  'pydantic*',
+  'langchain*',
+]
