freshcrate
Home > Databases > aiomysql

aiomysql

MySQL driver for asyncio.

Description

aiomysql ======== .. image:: https://github.com/aio-libs/aiomysql/actions/workflows/ci-cd.yml/badge.svg?branch=main :target: https://github.com/aio-libs/aiomysql/actions/workflows/ci-cd.yml .. image:: https://codecov.io/gh/aio-libs/aiomysql/branch/main/graph/badge.svg :target: https://codecov.io/gh/aio-libs/aiomysql :alt: Code coverage .. image:: https://badge.fury.io/py/aiomysql.svg :target: https://badge.fury.io/py/aiomysql :alt: Latest Version .. image:: https://readthedocs.org/projects/aiomysql/badge/?version=latest :target: https://aiomysql.readthedocs.io/ :alt: Documentation Status .. image:: https://badges.gitter.im/Join%20Chat.svg :target: https://gitter.im/aio-libs/Lobby :alt: Chat on Gitter **aiomysql** is a "driver" for accessing a `MySQL` database from the asyncio_ (PEP-3156/tulip) framework. It depends on and reuses most parts of PyMySQL_ . *aiomysql* tries to be like awesome aiopg_ library and preserve same api, look and feel. Internally **aiomysql** is copy of PyMySQL, underlying io calls switched to async, basically ``yield from`` and ``asyncio.coroutine`` added in proper places)). `sqlalchemy` support ported from aiopg_. Documentation ------------- https://aiomysql.readthedocs.io/ Basic Example ------------- **aiomysql** based on PyMySQL_ , and provides same api, you just need to use ``await conn.f()`` or ``yield from conn.f()`` instead of calling ``conn.f()`` for every method. Properties are unchanged, so ``conn.prop`` is correct as well as ``conn.prop = val``. .. code:: python import asyncio import aiomysql async def test_example(): async with aiomysql.create_pool(host='127.0.0.1', port=3306, user='root', password='', db='mysql') as pool: async with pool.acquire() as conn: async with conn.cursor() as cur: await cur.execute("SELECT 42;") print(cur.description) (r,) = await cur.fetchone() assert r == 42 asyncio.run(test_example()) Example of SQLAlchemy optional integration ------------------------------------------ Sqlalchemy support has been ported from aiopg_ so api should be very familiar for aiopg_ user.: .. code:: python import asyncio import sqlalchemy as sa from aiomysql.sa import create_engine metadata = sa.MetaData() tbl = sa.Table('tbl', metadata, sa.Column('id', sa.Integer, primary_key=True), sa.Column('val', sa.String(255))) async def go(): engine = await create_engine(user='root', db='test_pymysql', host='127.0.0.1', password='') async with engine.acquire() as conn: await conn.execute(tbl.insert().values(val='abc')) await conn.execute(tbl.insert().values(val='xyz')) async for row in conn.execute(tbl.select()): print(row.id, row.val) engine.close() await engine.wait_closed() asyncio.run(go()) Requirements ------------ * Python_ 3.9+ * PyMySQL_ .. _Python: https://www.python.org .. _asyncio: http://docs.python.org/3.5/library/asyncio.html .. _aiopg: https://github.com/aio-libs/aiopg .. _PyMySQL: https://github.com/PyMySQL/PyMySQL .. _Tornado-MySQL: https://github.com/PyMySQL/Tornado-MySQL

Release History

VersionChangesUrgencyDate
0.3.2Imported from PyPI (0.3.2)Low4/21/2026
v0.3.2Changes ------- 0.3.2 (2025-10-21) ^^^^^^^^^^^^^^^^^^ * Fix not persisting GitHub credentials during Git checkout action in CI for publishing release tags #1047 0.3.1 (2025-10-21) ^^^^^^^^^^^^^^^^^^ * Fix permissions in GitHub Actions workflow to allow pushing git tag after release #1046 0.3.0 (2025-10-21) ^^^^^^^^^^^^^^^^^^ * Drop support for Python 3.7 and 3.8, replaced by 3.12 and 3.13 #1026 * Bump minimum Sphinx version to generate documentation to 6.2.0 for Python 3.13 support #1026 Low10/22/2025
v0.2.0Changes ------- 0.2.0 (2023-06-11) ^^^^^^^^^^^^^^^^^^ * Bump minimal SQLAlchemy version to 1.3 #815 * Remove deprecated Pool.get #706 * | Partially ported `PyMySQL#304 <https://github.com/PyMySQL/PyMySQL/pull/304>`_ #792 | aiomysql now reraises the original exception during connect() if it's not `IOError`, `OSError` or `asyncio.TimeoutError`. | This was previously always raised as `OperationalError`. * Fix debug log level with sha256_password authentication #863 * Modernized code with Low6/11/2023
v0.1.1Changes ------- 0.1.1 (2022-05-08) ^^^^^^^^^^^^^^^^^^ * Fix SSL connection handshake charset not respecting client configuration #776 0.1.0 (2022-04-11) ^^^^^^^^^^^^^^^^^^ * Don't send sys.argv[0] as program_name to MySQL server by default #620 * Allow running process as anonymous uid #587 * Fix timed out MySQL 8.0 connections raising InternalError rather than OperationalError #660 * Fix timed out MySQL 8.0 connections being returned from Pool #660 * Ensure connections are properly closeLow5/8/2022
v0.1.0Changes ------- 0.1.0 (2022-04-11) ^^^^^^^^^^^^^^^^^^ * Don't send sys.argv[0] as program_name to MySQL server by default #620 * Allow running process as anonymous uid #587 * Fix timed out MySQL 8.0 connections raising InternalError rather than OperationalError #660 * Fix timed out MySQL 8.0 connections being returned from Pool #660 * Ensure connections are properly closed before raising an OperationalError when the server connection is lost #660 * Ensure connections are properly closed bLow4/11/2022
v0.1.0rc2Changes ------- To be included in 0.1.0 (unreleased) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * Don't send sys.argv[0] as program_name to MySQL server by default #620 * Allow running process as anonymous uid #587 * Fix timed out MySQL 8.0 connections raising InternalError rather than OperationalError #660 * Fix timed out MySQL 8.0 connections being returned from Pool #660 * Ensure connections are properly closed before raising an OperationalError when the server connection is lost #660 Low4/11/2022
v0.0.21# Changes * Allow to use custom Cursor subclasses #374 * Fill Connection class with actual client version #388 * Fix legacy __aiter__ methods #403 * Fix & update docs #418 #437 * Ignore pyenv's .python-version file #424 * Replace asyncio.streams.IncompleteReadError with asyncio.IncompleteReadError #460 #454 * Add support for SQLAlchemy default parameters #455 #466 * Update dependencies #485 * Support Python 3.7 & 3.8 #493Low11/26/2020
v0.0.20# Changes * Fixed connect_timeout #360 * Fixed support for SQLA executemany #324 * Fix the python 3.7 compatibility #357 * Fixed reuse connections when StreamReader has an exception #339 * Fixes warning when inserting binary strings #326Low12/19/2018
v0.0.19# Changes See v0.0.18 Low7/11/2018
v0.0.18## CHANGES * Updated to support latest PyMySQL changes. * aiomysql now sends client connection info. * MySQL8+ Support including sha256_password and cached_sha2_password authentication plugins. * Default max packet length sent to the server is no longer 1. * Fixes issue where cursor.nextset can hang on query sets that raise errors.Low7/9/2018
v0.0.17## CHANGES * Pinned version of PyMySQLLow7/6/2018
v0.0.16## CHANGES * Added ability to execute precompiled sqlalchemy queries #294 (Thanks @vlanse)Low6/3/2018
v0.0.15## CHANGES * Fixed handling of user-defined types for sqlalchemy #290 * Fix KeyError when server reports unknown collation #289Low5/20/2018
v0.0.14## CHANGES * Fixed SSL connection finalization #282Low4/22/2018
v0.0.13## CHANGES * Added SSL support #280 (Thanks @terrycain) * Fixed __all__ in aiomysql/__init__ #270 (Thanks @matianjun1) * Added docker fixtures #275 (Thanks @terrycain) Low4/19/2018
v0.0.12## CHANGES * Fixed support for SQLAlchemy 1.2.0 #244 * Fixed argument for cursor.execute in sa engine #239 (Thanks @NotSoSuper)Low1/18/2018
v0.0.9## CHANGES - Fixed AttributeError in _request_authentication function #104 (Thanks @ttlttl) - Fixed legacy auth #105 - uvloop added to test suite #106 - Fixed bug with unicode in json field #107 (Thanks @methane) Low9/14/2016
v0.0.8## CHANGES - Default min pool size reduced to 1 #80 (Thanks @Drizzt1991) - Update to PyMySQL 0.7.5 #89 - Fixed connection cancellation in process of executing a query #79 (Thanks @Drizzt1991) Low8/24/2016
v0.0.7## CHANGES - Fix for multiple results issue, ported from pymysql #52 - Fixed useless warning with no_delay option #55 - Added async/await support for Engine, SAConnection, Transaction #57 - pool.release returns future so we can wait on it in `__aexit__` #60 - Update to PyMySQL 0.6.7 Low1/27/2016
v0.0.6## CHANGES - Fixed bug with SA rollback (Thanks @khlyestovillarion!) - Fixed issue with default no_delay option (Thanks @khlyestovillarion!) Low12/10/2015
v0.0.5## CHANGES - no_delay option is deprecated and True by default - Add Cursor.mogrify() method - Support for "LOAD LOCAL INFILE" query. - Check connection inside pool, in case of timeout drop it, fixes #25 - Add support of python 3.5 features to pool, connection and cursor Low10/27/2015
v0.0.4## CHANGES - Allow to call connection.wait_closed twice. - Fixed sqlalchemy 1.0.0 support. - Fix #11: Rename Connection.wait_closed() to .ensure_closed() - Raise ResourceWarning on non-closed Connection - Rename Connection.connect to _connect Low5/23/2015
v0.0.3## Changes - Added support for PyMySQL up to 0.6.6. - Ported improvements from PyMySQL. - Added basic documentation. - Fixed and added more examples. Low3/10/2015
v0.0.2## Changes - Added manifest.in Low2/17/2015
v0.0.1## Changes - Initial release. - Implemented plain connections: connect, Connection, Cursor. - Implemented database pools. - Ported sqlalchemy optional support. Low2/17/2015

Dependencies & License Audit

Loading dependencies...

Similar Packages

subprocess-teesubprocess-tee0.4.2
azure-storage-blobMicrosoft Azure Blob Storage Client Library for Pythonazure-template_0.1.0b6187637
azure-storage-file-shareMicrosoft Azure Azure File Share Storage Client Library for Pythonazure-template_0.1.0b6187637
mirakuruProcess executor (not only) for tests.3.0.2
opentelemetry-instrumentation-qdrantOpenTelemetry Qdrant instrumentation0.60.0