一个快速的异步 MySQL 驱动程序
项目描述
asyncmy - 一个快速的异步 MySQL/MariaDB 驱动程序
介绍
asyncmy
是一个快速的 asyncio MySQL/MariaDB 驱动程序,它重用了大部分pymysql
和aiomysql ,但用cython重写了核心协议以加速。
特征
基准
结果来自benchmark。
设备为 iMac Pro(2017) i9 3.6GHz 48G,MySQL 版本为 8.0.26。
结论
- 毫无疑问,这
mysqlclient
是最快的 MySQL 驱动程序。 - 各类驱动器除了
select
. asyncio
可以增强insert
。asyncmy
与其他驱动程序相比,表现出色。
安装
pip install asyncmy
在 Windows 上安装
要在 Windows 上安装 asyncmy,您需要安装构建它所需的工具。
- 从https://visualstudio.microsoft.com/visual-cpp-build-tools/下载Microsoft C++ 构建工具
- 以管理员身份运行 CMD(不是必需但推荐)并在下载安装程序时导航到该文件夹
- 安装程序可执行文件应如下所示
vs_buildtools__XXXXXXXXX.XXXXXXXXXX.exe
,如果将其重命名为 just 会更容易vs_buildtools.exe
- 运行此命令(确保您有大约 5-6GB 的可用存储空间)
vs_buildtools.exe --norestart --passive --downloadThenInstall --includeRecommended --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Workload.MSBuildTools
- 等到安装完成
- 安装完成后,重启电脑
- 通过 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-cp310-cp310-manylinux_2_31_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f404d351d4f9fc741cdb8b49da8278e63a8551be6ccd03b514c2c0828500633d |
|
MD5 | 6e4afa7c4341da6930f83a83bd8c681a |
|
布莱克2-256 | b655b4d50f7546f55d3ca15679b106e35ad1ae573118fc8337a7f5a2681046ab |
关
asyncmy -0.2.5-cp310-cp310-macosx_10_16_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f176b55c82d3bdb10f0ecb3a518a54777f3d247e00f06add138f63df4edc0e3d |
|
MD5 | 2ea66ca30af7df1781fad9c610b246f4 |
|
布莱克2-256 | b445bb26129a0ac8a3694ef9a98d0d47d31e0172ec5778e2b03cd208a12eaff1 |
关
asyncmy -0.2.5-cp39-cp39-manylinux_2_31_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 61ed1b9e69dafe476f02c20962b8ee4ec5ba130b760bdf504015fcb80bbe6787 |
|
MD5 | a600aadfe05c7eda4f4234eb50189178 |
|
布莱克2-256 | ec1c2bd62723e9ac14825e1e54e6fd76ddfddc72d2a2ecd30c7a050666f5c4da |