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

mpbci0fu  于 2023-04-10  发布在  Python
关注(0)|答案(4)|浏览(206)

是否可以从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')
izkcnapc

izkcnapc1#

目前只有PostgreSQL原生asyncio支持通过aiopg库。
但是您可以通过loop.run_in_executor()运行对MSSQL的同步调用。

ryevplcw

ryevplcw2#

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

suzh9iv8

suzh9iv83#

更新:这个答案失去了它的用处,因为:

  • 异步框架的兴起,它成为Python Web应用程序框架的事实标准,以及red functions are contagious:试图恢复蓝色是没有意义的。
  • 引用的文章现在由Mike自己更新,指出现在SQLAlchemy也支持异步DB驱动程序-虽然这不会使基准测试结果无效,但没有人在其上运行令人信服的基准测试。

来自年轻人的回答:
我讨厌“不要这样做”的答案,但the article by Mike Bayer, the creator of SQLAlchemy让我想到了这一点:

  • 当涉及到常规数据库逻辑时,使用它与使用传统线程方法相比没有任何优势,您可能会期望性能出现小到中等程度的下降,而不是提高*
cyvaqqii

cyvaqqii4#

我会说使用从pyodbc移植的aioodbc在我目前的项目中工作得很好!:)

相关问题