异步的ODBC驱动程序。

aioodbc的Python项目详细描述


https://travis-ci.com/aio-libs/aioodbc.svg?branch=masterhttps://coveralls.io/repos/aio-libs/aioodbc/badge.svg?branch=master&service=githubhttps://img.shields.io/pypi/v/aioodbc.svgChat on Gitter

aioodbc是一个python 3.5+模块,可以访问ODBC数据库 用asyncio。它依赖于很棒的pyodbc库,并保留了相同的外观和 感觉aioodbc是使用异步/等待语法(PEP492)编写的,因此不兼容 python版本早于3.5。内部aioodbc使用线程来避免 阻止事件循环,threads并没有你想象的那么糟糕!.其他 像motor这样的驱动程序使用相同的方法。

aioodbcuvloop完全兼容并经过测试。看看测试 套件中,所有测试都使用默认事件循环和uvloop执行

支持的数据库

aioodbc应与pyodbc支持的所有数据库一起使用。但现在 库已经用sqlitemysqlpostgresql进行了测试。感觉 可以通过提交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())

连接池

连接池是从aiopg移植的,依赖于PEP492功能:

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或更高版本。

其他SQL驱动程序

  • aiopg-PostgreSQL异步客户端
  • aiomysql-异步客户端表单mysql

要求

更改

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)

  • 初次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java开始为Android开发应用程序   在哪种情况下,c++/c#namespace方法比Java方法更好?   java重构帮助。。。基于属性的对象还是大量成员字段?   java如何使用jackon json将嵌套对象作为字符串的对象转换为Pojo?   java是流式传输远程日志文件的有效方法   javajackson数据绑定:读入现有对象   java NullPointerException这是如何发生的?   java需要伪代码来进行文本压缩/解压缩   java JMS Websphere消息在发送时丢失   JUnit测试的Java SVNKit模拟单元测试   java Apache Crunch错误   java如何修复Android Studio/SQLite中的“空对象引用”错误?   java文件“navigation.json”在Android Studio项目中找不到   java如何在同一实体类上建立单向的一对一关系?   java调用web服务:javax。网ssl。SSLException:收到致命警报:协议\u版本   java与sql的连接   java Android:通过编程为透明背景图标(png)生成阴影,并在ImageButton中使用