跳转到主要内容

适用于asyncio的ODBC驱动程序。

项目描述

GitHub Actions status for master branch https://codecov.io/gh/aio-libs/aioodbc/branch/master/graph/badge.svg https://img.shields.io/pypi/v/aioodbc.svg https://img.shields.io/pypi/pyversions/aioodbc.svg Chat on Gitter

aioodbc 是一个适用于 Python 3.7+ 的模块,它允许使用 ODBC 数据库和 asyncio。它依赖于优秀的 pyodbc 库,并保留了相同的外观和感觉。内部,aioodbc 使用线程以避免阻塞事件循环,线程并不像你想象中那么糟糕!其他驱动程序,如 motor,也采用相同的方法。

aioodbcuvloop 完全兼容并经过测试。查看测试套件,所有测试都是使用默认事件循环和 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())

上下文管理器

PoolConnectionCursor 对象支持上下文管理协议

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 的情况下本地运行测试,请安装 unixodbcsqlite 驱动程序

$ sudo apt-get install unixodbc
$ sudo apt-get install libsqliteodbc

创建虚拟环境并安装带有要求的包

$ pip install -r requirements-dev.txt

运行测试,lint 等

$ make fmt
$ make lint
$ make test

其他 SQL 驱动程序

  • aiopg - PostgreSQL 的 asyncio 客户端

  • aiomysql - MySQL 的 asyncio 客户端

需求

变更

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 (41.3 kB 查看散列值)

上传时间 源代码

构建发行版

aioodbc-0.5.0-py3-none-any.whl (19.4 kB 查看散列值)

上传时间 Python 3

由支持