31

我的印象是,通过 SQLAlchemy 调用数据库会阻塞并且不适合在同步代码以外的任何地方使用。我是正确的(我希望我不是!)还是有办法将其配置为非阻塞?

4

3 回答 3

29

您可以使用 gevent 以非阻塞方式使用SQLA。这是一个使用 psycopg2 的示例,使用 psycopg2 的协程支持

https://bitbucket.org/zzzeek/green_sqla/

我也听说人们对pymysql使用相同的想法。由于 pymysql 是纯 Python 并使用套接字库,gevent 将套接字库修补为异步。

于 2012-04-18T19:00:02.150 回答
6

看看Tornado,因为他们有一些简洁的非阻塞库,尤其是 tornado.gen。

我们将它与Momoko一起使用,Momoko是 Tornado 的非阻塞 psycopg 包装器库。到目前为止一切都很好。也许唯一的缺点是您丢失了 SQLAlchemy 为您提供的所有模型对象内容。虽然性能是不真实的。

于 2012-04-18T17:27:47.247 回答
2

在 asyncio 的上下文中,如果没有 greenlet 的帮助,答案是否定的。

但是,可以在 asyncio 中仅使用 SQLAlchemy 的一部分。请在GINO 项目中找到示例,其中我们仅使用没有引擎和完整执行上下文的 SQLAlchemy 核心在 asyncio 中制作简单的 ORM。

于 2017-08-12T03:59:08.960 回答