2

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

以下是一个骨架 asyncio 程序,其中 (async) 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')
4

3 回答 3

5

目前只有通过 aiopg 库的 PostgreSQL 原生异步支持。

但是您可以通过loop.run_in_executor().

于 2014-07-18T11:48:04.567 回答
3

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

于 2014-07-30T10:44:18.843 回答
0

我讨厌“不要那样做”的答案,但是SQLAlchemy 的创建者 Mike Bayer 的文章让我确切地认为:

当涉及到典型的数据库逻辑时,使用它与传统的线程方法相比没有任何优势,您可能会期望性能会出现小到中度的下降,而不是增加

于 2015-07-04T09:23:55.490 回答