MySQL driver for asyncio.
Project description
aiomysql
========
.. image:: https://travis-ci.org/aio-libs/aiomysql.svg?branch=master
:target: https://travis-ci.org/aio-libs/aiomysql
.. image:: https://codecov.io/gh/aio-libs/aiomysql/branch/master/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/
Mailing List
------------
https://groups.google.com/forum/#!forum/aio-libs
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
from aiomysql import create_pool
loop = asyncio.get_event_loop()
async def go():
async with create_pool(host='127.0.0.1', port=3306,
user='root', password='',
db='mysql', loop=loop) as pool:
async with pool.get() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT 42;")
value = await cur.fetchone()
print(value)
loop.run_until_complete(go())
Connection Pool
---------------
Connection pooling ported from aiopg_ :
.. code:: python
import asyncio
import aiomysql
async def test_example(loop):
pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,
user='root', password='',
db='mysql', loop=loop)
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
pool.close()
await pool.wait_closed()
loop = asyncio.get_event_loop()
loop.run_until_complete(test_example(loop))
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(loop):
engine = await create_engine(user='root', db='test_pymysql',
host='127.0.0.1', password='', loop=loop)
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()
loop = asyncio.get_event_loop()
loop.run_until_complete(go(loop))
Requirements
------------
* Python_ 3.3+
* asyncio_ or Python_ 3.4+
* PyMySQL_
.. _Python: https://www.python.org
.. _asyncio: http://docs.python.org/3.4/library/asyncio.html
.. _aiopg: https://github.com/aio-libs/aiopg
.. _PyMySQL: https://github.com/PyMySQL/PyMySQL
.. _Tornado-MySQL: https://github.com/PyMySQL/Tornado-MySQL
Changes
-------
0.0.10 (2017-12-06)
^^^^^^^^^^^^^^^^^^
* Updated regular expressions to be compatible with pymysql #167 (Thanks @AlexLisovoy)
* Added connection recycling in the pool #216
0.0.9 (2016-09-14)
^^^^^^^^^^^^^^^^^^
* 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)
0.0.8 (2016-08-24)
^^^^^^^^^^^^^^^^^^
* 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)
0.0.7 (2016-01-27)
^^^^^^^^^^^^^^^^^^
* 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
0.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 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
0.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 Connection
* Rename Connection.connect to _connect
0.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.
========
.. image:: https://travis-ci.org/aio-libs/aiomysql.svg?branch=master
:target: https://travis-ci.org/aio-libs/aiomysql
.. image:: https://codecov.io/gh/aio-libs/aiomysql/branch/master/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/
Mailing List
------------
https://groups.google.com/forum/#!forum/aio-libs
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
from aiomysql import create_pool
loop = asyncio.get_event_loop()
async def go():
async with create_pool(host='127.0.0.1', port=3306,
user='root', password='',
db='mysql', loop=loop) as pool:
async with pool.get() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT 42;")
value = await cur.fetchone()
print(value)
loop.run_until_complete(go())
Connection Pool
---------------
Connection pooling ported from aiopg_ :
.. code:: python
import asyncio
import aiomysql
async def test_example(loop):
pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,
user='root', password='',
db='mysql', loop=loop)
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
pool.close()
await pool.wait_closed()
loop = asyncio.get_event_loop()
loop.run_until_complete(test_example(loop))
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(loop):
engine = await create_engine(user='root', db='test_pymysql',
host='127.0.0.1', password='', loop=loop)
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()
loop = asyncio.get_event_loop()
loop.run_until_complete(go(loop))
Requirements
------------
* Python_ 3.3+
* asyncio_ or Python_ 3.4+
* PyMySQL_
.. _Python: https://www.python.org
.. _asyncio: http://docs.python.org/3.4/library/asyncio.html
.. _aiopg: https://github.com/aio-libs/aiopg
.. _PyMySQL: https://github.com/PyMySQL/PyMySQL
.. _Tornado-MySQL: https://github.com/PyMySQL/Tornado-MySQL
Changes
-------
0.0.10 (2017-12-06)
^^^^^^^^^^^^^^^^^^
* Updated regular expressions to be compatible with pymysql #167 (Thanks @AlexLisovoy)
* Added connection recycling in the pool #216
0.0.9 (2016-09-14)
^^^^^^^^^^^^^^^^^^
* 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)
0.0.8 (2016-08-24)
^^^^^^^^^^^^^^^^^^
* 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)
0.0.7 (2016-01-27)
^^^^^^^^^^^^^^^^^^
* 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
0.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 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
0.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 Connection
* Rename Connection.connect to _connect
0.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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
aiomysql-0.0.10.tar.gz
(54.9 kB
view details)
File details
Details for the file aiomysql-0.0.10.tar.gz
.
File metadata
- Download URL: aiomysql-0.0.10.tar.gz
- Upload date:
- Size: 54.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b4757b3aaa72ee92b8f27c9e88c9a935c361969b2cf66948591f0bc9cdea68c |
|
MD5 | 99466751ad1f082ad2c1f7f89139f469 |
|
BLAKE2b-256 | b3e8acbaa2094d2efc431361be133de0d4e1a08b8192bafb1e8055b1377a8248 |