MySQL的异步IO驱动程序。
项目描述
aiomysql 是一个用于从 asyncio (PEP-3156/tulip) 框架访问 MySQL 数据库的“驱动程序”。它依赖于并重用了 PyMySQL 的大部分功能。 aiomysql 尝试像 aiopg 库一样出色,并保持相同的API、外观和感觉。
内部上,aiomysql 是 PyMySQL 的副本,底层的 io 调用已切换为异步,基本上添加了适当的 yield from 和 asyncio.coroutine)。 sqlalchemy 支持已从 aiopg 移植。
注意: 这是一个由 [Privex Inc.](https://www.privex.io) 维护的 分支,我们将其用于内部开发,以便在需要尚未/不会接受到上游的功能/错误修复时加快开发速度。
分支包: 我们将包 privex-aiomysql 发布到 PyPi,用于此分支。请注意,由于我们自己的修改,版本可能不会与上游版本匹配。
文档
邮件列表
基本示例
aiomysql 基于 PyMySQL ,并提供相同的API,你只需使用 await conn.f() 或 yield from conn.f() 替代每次方法调用时的 conn.f()。
属性没有改变,所以 conn.prop 也是正确的,同样 conn.prop = val 也是。
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))
SQLAlchemy可选集成示例
从 aiopg 端移植了Sqlalchemy支持,所以API对于 aiopg 用户应该非常熟悉。
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))
要求
更改
0.0.20 (2018-12-19)
修复了 connect_timeout #360
修复了对 SQLA executemany #324 的支持
修复了 python 3.7 兼容性 #357
修复了当 StreamReader 抛出异常时重用连接的问题 #339
修复了插入二进制字符串时的警告 #326
0.0.19 (2018-07-12)
参见 v0.0.18
0.0.18 (2018-07-09)
更新以支持最新的 PyMySQL 变更。
aiomysql 现在发送客户端连接信息。
支持 MySQL8+,包括 sha256_password 和 cached_sha2_password 认证插件。
发送到服务器的默认最大数据包长度不再是 1。
修复了 cursor.nextset 在引发错误的查询集中挂起的问题。
0.0.17 (2018-07-06)
固定了 PyMySQL 版本
0.0.16 (2018-06-03)
添加了执行预编译的 sqlalchemy 查询的功能 #294(感谢 @vlanse)
0.0.15 (2018-05-20)
修复了 sqlalchemy 的用户定义类型处理 #290
修复了当服务器报告未知校准时出现的 KeyError #289
0.0.14 (2018-04-22)
修复了 SSL 连接最终化 #282
0.0.13 (2018-04-19)
添加了 SSL 支持 #280(感谢 @terrycain)
修复了 aiomysql/__init__ 中的 __all__ #270(感谢 @matianjun1)
添加了 docker fixtures #275(感谢 @terrycain)
0.0.12 (2018-01-18)
修复了对 SQLAlchemy 1.2.0 的支持
修复了 sa engine 中 cursor.execute 的参数 #239(感谢 @NotSoSuper)
0.0.11 (2017-12-06)
修复了 pypi 上 README 的格式
0.0.10 (2017-12-06)
更新正则表达式以与 pymysql 兼容 #167(感谢 @AlexLisovoy)
在池中添加了连接回收 #216
0.0.9 (2016-09-14)
修复了 _request_authentication 函数中的 AttributeError #104(感谢 @ttlttl)
修复了遗留认证 #105
在测试套件中添加了 uvloop #106
修复了 json 字段中的 unicode 错误 #107(感谢 @methane)
0.0.8 (2016-08-24)
将默认最小池大小减少到 1 #80(感谢 @Drizzt1991)
更新到 PyMySQL 0.7.5 #89
修复了在执行查询过程中取消连接的问题 #79(感谢 @Drizzt1991)
0.0.7 (2016-01-27)
修复了多个结果的问题,从 pymysql 端移植 #52
修复了无 delay 选项的无用警告 #55
为 Engine、SAConnection、Transaction 添加了 async/await 支持 #57
pool.release 返回 future,因此我们可以在 __aexit__ 中等待它 #60
更新到 PyMySQL 0.6.7
0.0.6 (2015-12-11)
修复了 SA 回滚的 bug(感谢 @khlyestovillarion!)
修复了默认 no_delay 选项的问题(感谢 @khlyestovillarion!)
0.0.5 (2015-10-28)
no_delay 选项已弃用,默认为 True
添加 Cursor.mogrify() 方法
支持 “LOAD LOCAL INFILE” 查询。
在池内部检查连接,在超时时将其删除,修复了 #25
将 pool、连接和 cursor 的 python 3.5 特性添加到支持中
0.0.4 (2015-05-23)
允许调用 connection.wait_closed 两次。
修复了 sqlalchemy 1.0.0 支持。
修复 #11:将 Connection.wait_closed() 重命名为 .ensure_closed()
在非关闭的 Connection 上引发 ResourceWarning
将 Connection.connect 重命名为 _connect
0.0.3 (2015-03-10)
添加了对 PyMySQL 0.6.6 的支持。
移植了 PyMySQL 的改进。
添加了基本文档。
修复并添加了更多示例。
0.0.2 (2015-02-17)
添加了 MANIFEST.in。
0.0.1 (2015-02-17)
初始发布。
实现了普通连接:connect、Connection、Cursor。
实现了数据库池。
移植了 sqlalchemy 可选支持。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。