是否可以从Python(3.4)异步查询SQL Server?

时间:2014-07-18 08:01:50

标签: python sql-server asynchronous python-3.4 python-asyncio

是否可以从Python(3.4)对Microsoft SQL Server执行异步查询,即在asyncio事件循环的上下文中?

以下是骨架asyncio程序,其中(异步)SQL查询应该适合do_it函数:

import asyncio
import contextlib


@asyncio.coroutine
def do_it():
    # TODO: Make an asynchronous MS SQL query, but how??
    fut = asyncio.Future()
    fut.set_result(None)
    return fut


with contextlib.closing(asyncio.SelectorEventLoop()) as loop:
    asyncio.set_event_loop(loop)
    loop.run_until_complete(do_it())

print('Finished')

3 个答案:

答案 0 :(得分:2)

目前只有通过aiopg库支持PostgreSQL本地asyncio。

但您可以通过loop.run_in_executor()运行对MSSQL的同步调用。

答案 1 :(得分:2)

到目前为止,我发现的一个选项是商业产品mxODBC Connect,不幸的是它花费了数百美元。通过向SQL Server提供代理服务器,它能够支持异步调用。据说异步支持是通过gevent实现的,所以我不知道它是否适合asyncio。从Python的ODBC wiki开始,mxODBC是唯一列出异步支持的产品。

答案 2 :(得分:0)

我讨厌“不要那样做”的答案,但是the article by Mike Bayer, the creator of SQLAlchemy让我想到的确如此:

当谈到刻板的数据库逻辑时,使用它与传统的线程方法没有任何优势,你可能会期望性能中的小到中等降低,而不是的增加