跳转到主要内容

MySQL的异步IO驱动程序。

项目描述

https://travis-ci.cn/Privex/aiomysql.svg?branch=master Code coverage Latest Version Documentation Status Chat on Gitter

aiomysql 是一个用于从 asyncio (PEP-3156/tulip) 框架访问 MySQL 数据库的“驱动程序”。它依赖于并重用了 PyMySQL 的大部分功能。 aiomysql 尝试像 aiopg 库一样出色,并保持相同的API、外观和感觉。

内部上,aiomysql 是 PyMySQL 的副本,底层的 io 调用已切换为异步,基本上添加了适当的 yield fromasyncio.coroutine)。 sqlalchemy 支持已从 aiopg 移植。

注意: 这是一个由 [Privex Inc.](https://www.privex.io) 维护的 分支,我们将其用于内部开发,以便在需要尚未/不会接受到上游的功能/错误修复时加快开发速度。

分支包: 我们将包 privex-aiomysql 发布到 PyPi,用于此分支。请注意,由于我们自己的修改,版本可能不会与上游版本匹配。

文档

https://aiomysql.readthedocs.io/

邮件列表

https://groups.google.com/forum/#!forum/aio-libs

基本示例

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 可选支持。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

privex_aiomysql-0.0.21.tar.gz (39.8 kB 查看哈希值)

上传时间 源代码

构建分发

privex_aiomysql-0.0.21-py3-none-any.whl (41.1 kB 查看哈希值)

上传时间 Python 3

由以下支持