适用于asyncio的ODBC驱动程序。
项目描述
aioodbc 是一个适用于 Python 3.7+ 的模块,它允许使用 ODBC 数据库和 asyncio。它依赖于优秀的 pyodbc 库,并保留了相同的外观和感觉。内部,aioodbc 使用线程以避免阻塞事件循环,线程并不像你想象中那么糟糕!其他驱动程序,如 motor,也采用相同的方法。
aioodbc 与 uvloop 完全兼容并经过测试。查看测试套件,所有测试都是使用默认事件循环和 uvloop 执行的。
基本示例
aioodbc 基于 pyodbc 并提供相同的 API,你只需使用 yield from conn.f() 或 await conn.f() 而不是 conn.f()
属性没有变化,所以 conn.prop 是正确的,以及 conn.prop = val。
import asyncio
import aioodbc
async def test_example():
dsn = "Driver=SQLite;Database=sqlite.db"
conn = await aioodbc.connect(dsn=dsn)
cur = await conn.cursor()
await cur.execute("SELECT 42 AS age;")
rows = await cur.fetchall()
print(rows)
print(rows[0])
print(rows[0].age)
await cur.close()
await conn.close()
asyncio.run(test_example())
连接池
连接池是从 aiopg 迁移过来的,并依赖于 PEP492 功能
import asyncio
import aioodbc
async def test_pool():
dsn = "Driver=SQLite3;Database=sqlite.db"
pool = await aioodbc.create_pool(dsn=dsn)
async with pool.acquire() as conn:
cur = await conn.cursor()
await cur.execute("SELECT 42;")
r = await cur.fetchall()
print(r)
await cur.close()
await conn.close()
pool.close()
await pool.wait_closed()
asyncio.run(test_pool())
上下文管理器
Pool、Connection 和 Cursor 对象支持上下文管理协议
import asyncio
import aioodbc
async def test_example():
dsn = "Driver=SQLite;Database=sqlite.db"
async with aioodbc.create_pool(dsn=dsn) as pool:
async with pool.acquire() as conn:
async with conn.cursor() as cur:
await cur.execute("SELECT 42 AS age;")
val = await cur.fetchone()
print(val)
print(val.age)
asyncio.run(test_example())
安装
在 Linux 环境中,pyodbc(因此 aioodbc)需要 unixODBC 库。你可以使用你的包管理器安装它,例如
$ sudo apt-get install unixodbc $ sudo apt-get install unixodbc-dev
然后
pip install aioodbc
运行测试
要在不使用 docker 的情况下本地运行测试,请安装 unixodbc 和 sqlite 驱动程序
$ sudo apt-get install unixodbc $ sudo apt-get install libsqliteodbc
创建虚拟环境并安装带有要求的包
$ pip install -r requirements-dev.txt
运行测试,lint 等
$ make fmt $ make lint $ make test
其他 SQL 驱动程序
需求
变更
0.5.0 (2023-10-28)
添加了对 Python 3.12 的支持
将 pyodbc 的最小支持版本提升到 5.0.1
删除了与 aiodocker 相关的测试以解锁 Python 3.12
0.4.1 (2023-10-28)
实现了 cursor setinputsizes。
实现了 cursor fetchval。
添加了更多的类型注解。
为 cursor 添加了 autocommit 设置器。
0.4.0 (2023-03-16)
修复了与 Python 3.9+ 的兼容性。
删除了显式循环参数的使用。
为 cursor 添加了默认读取大小参数。
更新了测试和 CI 脚本。
使用 black 格式化了代码库。
0.3.3 (2019-07-05)
在 cursor 中正确传递了参数 echo #185
在返回到池之前关闭了不良的连接 #195
0.3.2 (2018-08-04)
为 after_created 和 ThreadPoolExecutor 添加了基本文档(感谢 @AlexHagerman)
Cursor/connection 上下文管理器现在在错误时回滚事务,否则在 autocommit=False 时提交 #178(感谢 @julianit)
0.3.1 (2018-03-23)
为连接配置添加了 after_create 钩子(感谢 @lanfon72)
0.3.0 (2018-02-23)
添加了可选的池连接回收 #167(感谢 @drpoggi)
0.2.0 (2017-06-24)
修复了 Cursor.execute 返回 pyodbc.Cursor 而不是自身的问题 #114
修复了 __aiter__ 在 Python>=3.5.2 时不可以被等待的问题 #113
测试现在使用 aiodocker #106
0.1.0 (2017-04-30)
修复了项目版本
0.0.4 (2017-04-30)
改进了 mysql 测试
0.0.3 (2016-07-05)
将测试 docker 化,现在我们可以通过 docker 添加更多数据库到测试中 #15, #17, #19
测试套件同时使用默认 asyncio 和 uvloop 执行 #18
0.0.2 (2016-01-01)
改进了 PEP 492 的支持。
删除了 pool.get 方法,请使用 acquire 代替。
添加了针对 MySQL 的测试。
添加了许多文档字符串。
0.0.1 (2015-10-12)
初始发布。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
构建发行版
aioodbc-0.5.0.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | cbccd89ce595c033a49c9e6b4b55bbace7613a104b8a46e3d4c58c4bc4f25075 |
|
MD5 | d2577f645b6339328d9ca657ce8c8ddb |
|
BLAKE2b-256 | 45873a7580938f217212a574ba0d1af78203fc278fc439815f3fc515a7fdc12b |
aioodbc-0.5.0-py3-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | bcaf16f007855fa4bf0ce6754b1f72c6c5a3d544188849577ddd55c5dc42985e |
|
MD5 | 2ca3ee2417c6166fcd5db023548ecac6 |
|
BLAKE2b-256 | b0804d1565bc16b53cd603c73dc4bc770e2e6418d957417e05031314760dc28c |