Skip to main content

一个快速的异步 MySQL 驱动程序

项目描述

asyncmy - 一个快速的异步 MySQL/MariaDB 驱动程序

图片 图片 皮皮 词

介绍

asyncmy是一个快速的 asyncio MySQL/MariaDB 驱动程序,它重用了大部分pymysqlaiomysql ,但用cython重写了核心协议以加速。

特征

  • API 与aiomysql兼容。
  • 通过cython更快。
  • MySQL 复制协议支持asyncio.
  • 在CI中测试了 MySQL 和 MariaDB 。

基准

结果来自benchmark

设备为 iMac Pro(2017) i9 3.6GHz 48G,MySQL 版本为 8.0.26。

基准

结论

  • 毫无疑问,这mysqlclient是最快的 MySQL 驱动程序。
  • 各类驱动器除了select.
  • asyncio可以增强insert
  • asyncmy与其他驱动程序相比,表现出色。

安装

pip install asyncmy

在 Windows 上安装

要在 Windows 上安装 asyncmy,您需要安装构建它所需的工具。

  1. https://visualstudio.microsoft.com/visual-cpp-build-tools/下载Microsoft C++ 构建工具
  2. 以管理员身份运行 CMD(不是必需但推荐)并在下载安装程序时导航到该文件夹
  3. 安装程序可执行文件应如下所示vs_buildtools__XXXXXXXXX.XXXXXXXXXX.exe,如果将其重命名为 just 会更容易vs_buildtools.exe
  4. 运行此命令(确保您有大约 5-6GB 的可用存储空间)
vs_buildtools.exe --norestart --passive --downloadThenInstall --includeRecommended --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Workload.MSBuildTools
  1. 等到安装完成
  2. 安装完成后,重启电脑
  3. 通过 PIP 安装 asyncmy
pip install asyncmy

现在您可以卸载以前安装的工具。

用法

利用connect

asyncmy提供了一种通过简单的工厂函数连接到 MySQL 数据库的方法asyncmy.connnect()。如果您只需要一个与数据库的连接,请使用此功能,请考虑用于多个连接的连接池。

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())

利用pool

asyncmy提供连接池以及普通的 Connection 对象。

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())

复制

asyncmy支持 MySQL 复制协议,如python-mysql-replication,但由asyncio.

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,
    )
    async for event in stream:
        print(event)


if __name__ == '__main__':
    asyncio.run(run())

谢谢

asyncmy 建立在这些很棒的项目之上。

  • pymysql,一个纯python MySQL 客户端。
  • aiomysql,一个用于从 asyncio 访问 MySQL 数据库的库。
  • python-mysql-replication,纯 Python MySQL 复制协议的实现建立在 PyMYSQL 之上。

执照

该项目在Apache-2.0许可下获得许可。

项目详情


下载文件

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

源分布

asyncmy-0.2.5.tar.gz (62.8 kB 查看哈希

已上传 source

内置发行版

asyncmy-0.2.5-cp310-cp310-win_amd64.whl (1.4 MB 查看哈希

已上传 cp310

asyncmy-0.2.5-cp310-cp310-manylinux_2_31_x86_64.whl (4.4 MB 查看哈希

已上传 cp310

asyncmy-0.2.5-cp310-cp310-macosx_10_16_x86_64.whl (1.5 MB 查看哈希

已上传 cp310

asyncmy-0.2.5-cp39-cp39-win_amd64.whl (1.4 MB 查看哈希

已上传 cp39

asyncmy-0.2.5-cp39-cp39-manylinux_2_31_x86_64.whl (4.4 MB 查看哈希

已上传 cp39

asyncmy-0.2.5-cp39-cp39-macosx_10_16_x86_64.whl (1.5 MB 查看哈希

已上传 cp39

asyncmy-0.2.5-cp38-cp38-win_amd64.whl (1.4 MB 查看哈希

已上传 cp38

asyncmy-0.2.5-cp38-cp38-manylinux_2_31_x86_64.whl (4.9 MB 查看哈希

已上传 cp38

asyncmy-0.2.5-cp38-cp38-macosx_10_16_x86_64.whl (1.5 MB 查看哈希

已上传 cp38

asyncmy-0.2.5-cp37-cp37m-win_amd64.whl (1.4 MB 查看哈希

已上传 cp37

asyncmy-0.2.5-cp37-cp37m-manylinux_2_31_x86_64.whl (4.0 MB 查看哈希

已上传 cp37

asyncmy-0.2.5-cp37-cp37m-macosx_10_16_x86_64.whl (1.5 MB 查看哈希

已上传 cp37