Package: privex-aiomysql
aiomysqlis a “driver” for accessing aMySQLdatabase
from theasyncio(PEP-3156/tulip) framework. It depends on and reuses most
parts ofPyMySQL.aiomysqltries to be like awesomeaiopglibrary and
preserve same api, look and feel.Internallyaiomysqlis copy of PyMySQL, underlying io calls switched
to async, basicallyyield fromandasyncio.coroutineadded in
proper places)).sqlalchemysupport ported fromaiopg.NOTE:This is aforkmaintained by [Privex Inc.](https://www.privex.io), which we use internally to speed up
development when we require features / bug fixes that haven’t yet / won’t be accepted into upstream.FORK PACKAGE:We publish the packageprivex-aiomysqlto PyPi for this fork. Please be warned that the versioning may not
match upstream’s versioning, due to modifications made by ourselves.Documentationhttps://aiomysql.readthedocs.io/Mailing Listhttps://groups.google.com/forum/#!forum/aio-libsBasic Exampleaiomysqlbased onPyMySQL, and provides same api, you just need
to useawait conn.f()oryield from conn.f()instead of callingconn.f()for every method.Properties are unchanged, soconn.propis correct as well asconn.prop = val.importasyncioimportaiomysqlasyncdeftest_example(loop):pool=awaitaiomysql.create_pool(host='127.0.0.1',port=3306,user='root',password='',db='mysql',loop=loop)asyncwithpool.acquire()asconn:asyncwithconn.cursor()ascur:awaitcur.execute("SELECT 42;")print(cur.description)(r,)=awaitcur.fetchone()assertr==42pool.close()awaitpool.wait_closed()loop=asyncio.get_event_loop()loop.run_until_complete(test_example(loop))Example of SQLAlchemy optional integrationSqlalchemy support has been ported fromaiopgso api should be very familiar
foraiopguser.:importasyncioimportsqlalchemyassafromaiomysql.saimportcreate_enginemetadata=sa.MetaData()tbl=sa.Table('tbl',metadata,sa.Column('id',sa.Integer,primary_key=True),sa.Column('val',sa.String(255)))asyncdefgo(loop):engine=awaitcreate_engine(user='root',db='test_pymysql',host='127.0.0.1',password='',loop=loop)asyncwithengine.acquire()asconn:awaitconn.execute(tbl.insert().values(val='abc'))awaitconn.execute(tbl.insert().values(val='xyz'))asyncforrowinconn.execute(tbl.select()):print(row.id,row.val)engine.close()awaitengine.wait_closed()loop=asyncio.get_event_loop()loop.run_until_complete(go(loop))RequirementsPython3.5.3+PyMySQLChanges0.0.20 (2018-12-19)Fixed connect_timeout #360Fixed support for SQLA executemany #324Fix the python 3.7 compatibility #357Fixed reuse connections when StreamReader has an exception #339Fixes warning when inserting binary strings #3260.0.19 (2018-07-12)See v0.0.180.0.18 (2018-07-09)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.0.0.17 (2018-07-06)Pinned version of PyMySQL0.0.16 (2018-06-03)Added ability to execute precompiled sqlalchemy queries #294 (Thanks @vlanse)0.0.15 (2018-05-20)Fixed handling of user-defined types for sqlalchemy  #290Fix KeyError when server reports unknown collation #2890.0.14 (2018-04-22)Fixed SSL connection finalization  #2820.0.13 (2018-04-19)Added SSL support #280 (Thanks @terrycain)Fixed __all__ in aiomysql/__init__ #270 (Thanks @matianjun1)Added docker fixtures #275 (Thanks @terrycain)0.0.12 (2018-01-18)Fixed support for SQLAlchemy 1.2.0Fixed argument for cursor.execute in sa engine #239 (Thanks @NotSoSuper)0.0.11 (2017-12-06)Fixed README formatting on pypi0.0.10 (2017-12-06)Updated regular expressions to be compatible with pymysql #167 (Thanks @AlexLisovoy)Added connection recycling in the pool #2160.0.9 (2016-09-14)Fixed AttributeError in  _request_authentication function #104 (Thanks @ttlttl)Fixed legacy auth #105uvloop added to test suite #106Fixed bug with unicode in json field #107 (Thanks @methane)0.0.8 (2016-08-24)Default min pool size reduced to 1 #80 (Thanks @Drizzt1991)Update to PyMySQL 0.7.5 #89Fixed connection cancellation in process of executing a query #79 (Thanks @Drizzt1991)0.0.7 (2016-01-27)Fix for multiple results issue, ported from pymysql #52Fixed useless warning with no_delay option #55Added async/await support for Engine, SAConnection, Transaction #57pool.release returns future so we can wait on it in __aexit__ #60Update to PyMySQL 0.6.70.0.6 (2015-12-11)Fixed bug with SA rollback (Thanks @khlyestovillarion!)Fixed issue with default no_delay option (Thanks @khlyestovillarion!)0.0.5 (2015-10-28)no_delay option is deprecated and True by defaultAdd Cursor.mogrify() methodSupport for “LOAD LOCAL INFILE” query.Check connection inside pool, in case of timeout drop it, fixes #25Add support of python 3.5 features to pool, connection and cursor0.0.4 (2015-05-23)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 ConnectionRename Connection.connect to _connect0.0.3 (2015-03-10)Added support for PyMySQL up to 0.6.6.Ported improvements from PyMySQL.Added basic documentation.Fixed and added more examples.0.0.2 (2015-02-17)Added MANIFEST.in.0.0.1 (2015-02-17)Initial release.Implemented plain connections: connect, Connection, Cursor.Implemented database pools.Ported sqlalchemy optional support.