asyncmy
is a fast asyncio MySQL driver, which reuse most of pymysql and rewrite
core with cython to speedup.
The result comes from benchmark, we can know asyncmy
performs well when compared to other drivers.
The device is MacBook Pro (13-inch, M1, 2020) 16G and MySQL version is 8.0.23.
Just install from pypi:
> pip install asyncmy
from asyncmy import connect
from asyncmy.cursors import DictCursor
import asyncio
async def run():
conn = await connect()
async with conn.cursor(cursor=DictCursor) as cursor:
await cursor.execute("create database if not exists test")
await cursor.execute(
"""CREATE TABLE if not exists test.asyncmy
(
`id` int primary key auto_increment,
`decimal` decimal(10, 2),
`date` date,
`datetime` datetime,
`float` float,
`string` varchar(200),
`tinyint` tinyint
)"""
)
if __name__ == '__main__':
asyncio.run(run())
import asyncmy
import asyncio
async def run():
pool = await asyncmy.create_pool()
async with pool.acquire() as conn:
async with conn.cursor() as cursor:
await cursor.execute("SELECT 1")
ret = await cursor.fetchone()
assert ret == (1,)
if __name__ == '__main__':
asyncio.run(run())
from asyncmy import connect
from asyncmy.replication import BinLogStream
import asyncio
async def run():
conn = await connect()
ctl_conn = await connect()
stream = BinLogStream(
conn,
ctl_conn,
1,
master_log_file="binlog.000172",
master_log_position=2235312,
resume_stream=True,
blocking=True,
)
await stream.connect()
async for event in stream:
print(event)
if __name__ == '__main__':
asyncio.run(run())
asyncmy is build on top of these nice projects.
- pymysql, a pure python MySQL client.
- aiomysql, a library for accessing a MySQL database from the asyncio.
- python-mysql-replication, pure Python Implementation of MySQL replication protocol build on top of PyMYSQL.
This project is licensed under the Apache-2.0 License.