异步的ODBC驱动程序。
aioodbc的Python项目详细描述
aioodbc是一个python 3.5+模块,可以访问ODBC数据库 用asyncio。它依赖于很棒的pyodbc库,并保留了相同的外观和 感觉aioodbc是使用异步/等待语法(PEP492)编写的,因此不兼容 python版本早于3.5。内部aioodbc使用线程来避免 阻止事件循环,threads并没有你想象的那么糟糕!.其他 像motor这样的驱动程序使用相同的方法。
aioodbc与uvloop完全兼容并经过测试。看看测试 套件中,所有测试都使用默认事件循环和uvloop执行
支持的数据库
aioodbc应与pyodbc支持的所有数据库一起使用。但现在 库已经用sqlite、mysql和postgresql进行了测试。感觉 可以通过提交PR将其他数据库添加到测试套件中
基本示例
aioodbc基于pyodbc并提供相同的api,您只需要 使用yield from conn.f()或await conn.f(),而不是conn.f()
属性不变,因此conn.prop也是正确的 conn.prop = val
importasyncioimportaioodbcloop=asyncio.get_event_loop()asyncdeftest_example():dsn='Driver=SQLite;Database=sqlite.db'conn=awaitaioodbc.connect(dsn=dsn,loop=loop)cur=awaitconn.cursor()awaitcur.execute("SELECT 42 AS age;")rows=awaitcur.fetchall()print(rows)print(rows[0])print(rows[0].age)awaitcur.close()awaitconn.close()loop.run_until_complete(test_example())
连接池
importasyncioimportaioodbcloop=asyncio.get_event_loop()asyncdeftest_pool():dsn='Driver=SQLite;Database=sqlite.db'pool=awaitaioodbc.create_pool(dsn=dsn,loop=loop)asyncwithpool.acquire()asconn:cur=awaitconn.cursor()awaitcur.execute("SELECT 42;")r=awaitcur.fetchall()print(r)awaitcur.close()awaitconn.close()pool.close()awaitpool.wait_closed()loop.run_until_complete(test_pool())
上下文管理器
池,连接和光标对象支持上下文管理 协议:
importasyncioimportaioodbcloop=asyncio.get_event_loop()asyncdeftest_example():dsn='Driver=SQLite;Database=sqlite.db'asyncwithaioodbc.create_pool(dsn=dsn,loop=loop)aspool:asyncwithpool.acquire()asconn:asyncwithconn.cursor()ascur:awaitcur.execute('SELECT 42 AS age;')val=awaitcur.fetchone()print(val)print(val.age)loop.run_until_complete(test_example())
安装
在linux环境中pyodbc(因此aioodbc)需要unixODBC库。 您可以使用包管理器安装它,例如:
$ sudo apt-get install unixodbc $ sudo apt-get install unixodbc-dev
然后:
pip install aioodbc
运行测试
为了进行测试,您需要安装docker并开发 要求:
$ pip install -r requirements-dev.txt
为了简化开发,您应该安装提供的Docker容器。 这样就不需要安装任何数据库或其他系统库,所有事情都在容器中发生。
然后执行:
$ make docker_build $ make docker_test
测试将自动提取图像并使用 所需的数据库。
注意:运行测试需要python 3.6或更高版本。
更改
0.3.3(2019-07-05)
- 参数echo在cursor 185中正确传递
- 在返回池195之前关闭错误的连接
0.3.2(2018-08-04)
- 添加了after_created和threadpoolexecutor_176的基本文档(感谢@alexhagerman)
- 游标/连接上下文管理器现在在出错时回滚事务, 否则,如果autocommit=false 178(感谢@julianit)
0.3.1(2018-03-23)
- 在创建连接配置挂钩后添加(感谢@lanfon72)
0.3.0(2018-02-23)
- 添加了可选的池连接回收#167(感谢@drpoggi)
0.2.0(2017-06-24)
- fixed cursor.execute返回一个pyodbc.cursor,而不是它本身114
- 修正了python不能等待的aiter=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)
- Dockerize测试,现在我们可以使用Docker 15、17、19将更多的数据库添加到测试中
- 使用默认异步和uvloop 18执行测试套件
0.0.2(2016-01-01)
- 提高了对pep 492的支持
- pool.get方法已删除,请改用acquire。
- 增加了对MySQL的测试
- 添加了一堆文档字符串
0.0.1(2015-10-12)
- 初次发布