python - 运行并发请求时获取 "Invalid cursor state (0)"(SQLAlchemy & wsgi/python)

标签 python sql-server sqlalchemy freetds database-concurrency

我在 WSGI python Web 应用程序中使用 SQLAlchemy 来查询数据库。如果我执行两个并发请求,第二个请求总是会抛出异常,SQL Server 会声明

[24000] [FreeTDS][SQL Server]Invalid cursor state (0) (SQLExecDirectW)

不幸的是,我似乎无法使用缓存来防止对数据库的其他请求。还有其他方法可以解决这个问题吗?理想情况下使用 native python 库(即不依赖另一个 python 模块)?

我唯一能想到的是使用线程来锁定进行数据库查询的函数,但我担心这会减慢应用程序的速度。

还有什么可以做的吗?这是配置问题吗?

我在 Centos 5.9 服务器上使用 FreeTDS v0.91,连接到 MS SQL Server 2008。

网络应用程序基于 Paste。

最佳答案

您的两个并发请求是否使用不同的数据库连接? DBAPI 连接通常不是线程安全的。在 ORM 级别,您需要确保使用 session per request这样每个请求都有自己的 session ,因此有专用的 DBAPI 连接。

关于python - 运行并发请求时获取 "Invalid cursor state (0)"(SQLAlchemy & wsgi/python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18150944/

相关文章:

python - SQLAlchemy 使用合并更新 PostgreSQL 数组不起作用

python - 通过sqlite在sql alchemy中远程创建数据库

SQL 将多行转换为多列

c# - 无效的对象名称 'dbo.CategoryIdArray'

python - 用字符串填充空列表元素python

Python、WMI、注册表和奇怪的结果

sql - OpenQuery 和使用动态 SQL

python - SQLAlchemy 正则表达式与 MySQL 数据库使用\b

Python:更改来自函数参数的全局变量

javascript - 合并两个代码