异步IO的MySQL驱动程序。
项目描述
aiomysql 是一个从 asyncio(PEP-3156/tulip)框架中访问 MySQL 数据库的“驱动程序”。它依赖于并重用 PyMySQL 的大部分功能。 aiomysql 尝试与出色的 aiopg 库相似,并保留相同的 API、外观和感觉。
内部上,aiomysql 是 PyMySQL 的副本,底层的 io 调用已切换为异步,基本上在合适的位置添加了 yield from 和 asyncio.coroutine)。 sqlalchemy 支持(从 aiopg)移植过来。
文档
基本示例
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 可选集成的示例
SQLAlchemy 支持已从 aiopg 移植过来,因此 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.2.0 (2023-06-11)
- 将最小 SQLAlchemy 版本提升到 1.3 #815 
- 删除已弃用的 Pool.get #706 
- 部分移植 PyMySQL#304 #792aiomysql 现在在连接()期间重新抛出原始异常,如果不是 IOError、OSError 或 asyncio.TimeoutError。这以前总是被作为 OperationalError 抛出。
- 修复使用 sha256_password 身份验证时的调试日志级别 #863 
- 使用 pyupgrade 将代码现代化为 Python 3.7+ 语法 #930 
- 移除对已停止服务的 MariaDB 版本 10.3、10.7 和 10.8 的测试,添加对 MariaDB 10.9、10.10、10.11 的测试 #932 
0.1.1 (2022-05-08)
- 修复 SSL 连接握手字符集不尊重客户端配置 #776 
0.1.0 (2022-04-11)
- 默认情况下,不要将 sys.argv[0] 作为 program_name 发送到 MySQL 服务器 #620 
- 允许以匿名 uid 运行进程 #587 
- 修复超时 MySQL 8.0 连接抛出 InternalError 而不是 OperationalError #660 
- 修复超时 MySQL 8.0 连接从 Pool 返回 #660 
- 在服务器连接丢失时,在抛出 OperationalError 之前确保连接被正确关闭 #660 
- 在数据包序列号不一致时,在抛出 InternalError 之前确保连接被正确关闭 #660 
- Unix 套接字现在内部被认为是安全的,允许使用 sha256_password 和 caching_sha2_password 身份验证方法 #695 
- 测试套件现在也测试 Unix 套接字连接 #696 
- 修复 SSCursor 在最后结果未完全检索时抛出 InternalError #635 
- 删除已弃用的 no_delay 参数 #702 
- 支持 PyMySQL 至版本 1.0.2 #643 
- 将最小 PyMySQL 版本提升到 1.0.0 #713 
- 使 Cursor.executemany() 中的 % 格式化与 Cursor.execute() 保持一致,现在在 Cursor.executemany() 中需要将字面量 % 重复两次 #714 
- 固定无限池大小现在不起作用,现在通过传递 maxsize=0 到 create_pool 来实现,如文档所述 #119 
- 添加了 Pool.closed 属性,与 aiopg 中的属性相同 #463 
- 修复了 SQLAlchemy 连接上下文迭代器 #410 
- 修复了 SSCursor 的错误包处理 #428 
- 所需的 python 版本现在已在 python_requires 中正确记录,而不是在 setup.py 执行时失败 #731 
- 根据 PyMySQL[rsa] 添加 rsa extras_require #557 
- 迁移到 PEP 517 构建系统 #746 
- 自动报告的 __version__ 现在返回构建期间由 setuptools-scm 生成的版本,否则返回 ‘unknown’ #748 
- 修复了 SSCursor 在错误查询上引发查询超时错误的问题 #428 
0.0.22 (2021-11-14)
- 支持 python 3.10 #505 
0.0.21 (2020-11-26)
- 允许使用自定义 Cursor 子类 #374 
- 为 Connection 类填充实际客户端版本 #388 
- 修复了 legacy __aiter__ 方法 #403 
- 修复并更新了文档 #418 #437 
- 忽略 pyenv 的 .python-version 文件 #424 
- 将 asyncio.streams.IncompleteReadError 替换为 asyncio.IncompleteReadError #460 #454 
- 添加了对 SQLAlchemy 默认参数的支持 #455 #466 
- 更新依赖项 #485 
- 支持 Python 3.7 和 3.8 #493 
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 固件 #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 
- 修复了无延迟选项的无效警告 #55 
- 为 Engine、SAConnection、Transaction 添加了 async/await 支持 #57 
- pool.release 返回 future,因此我们可以在 __aexit__ 中等待它 #60 
- 更新到 PyMySQL 0.6.7 
0.0.6 (2015-12-11)
- 修复了 SA 回滚错误(感谢 @khlyestovillarion!) 
- 修复了默认无延迟选项的问题(感谢 @khlyestovillarion!) 
0.0.5 (2015-10-28)
- no_delay 选项已弃用,默认为 True 
- 添加 Cursor.mogrify() 方法 
- 支持“LOAD LOCAL INFILE”查询。 
- 在池内检查连接,如果超时则丢弃它,修复了 #25 
- 将 pool、connection 和 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 可选支持。 
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
aiomysql-0.2.0.tar.gz 的散列值
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | 558b9c26d580d08b8c5fd1be23c5231ce3aeff2dadad989540fee740253deb67 | |
| MD5 | 96198d120c1109f53bed9724b1182c86 | |
| BLAKE2b-256 | 67762c5b55e4406a1957ffdfd933a94c2517455291c97d2b81cec6813754791a | 
aiomysql-0.2.0-py3-none-any.whl 的散列值
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | b7c26da0daf23a5ec5e0b133c03d20657276e4eae9b73e040b72787f6f6ade0a | |
| MD5 | 677da8788742d34daa5e34512ef01442 | |
| BLAKE2b-256 | 4287c982ee8b333c85b8ae16306387d703a1fcdfc81a2f3f15a24820ab1a512d | 
