0

我正在尝试从 pylons (paster-based) 网络服务器对数据库运行一些查询,每次尝试导入我正在使用的 pymssql 库时(顺便说一下),我都会收到此错误:

tds_init_winsock: WSAEnumProtocols failed with 10055(WSAENOBUFS: No buffer space
available.)

关于进口。我也尝试使用 sqlalchemy 并在尝试制作 sqlalchemy 引擎时得到完全相同的错误。我能做些什么来让它发挥作用。我没有连接到网络服务器或 pymssql 库,所以其他任何人都可以。

环境信息:

我使用的机器是 32 位 win7 桌面服务器在 python virtualenv 环境中运行,但是 pymssql 库在虚拟环境中完美运行,只是不在服务器上

更新:

更多背景信息(和解释):我不认为这是一个 MSSQL 问题,甚至在某种程度上是一个 python 问题。有两个原因:A) 我和其他人在出现此问题时仍然可以连接到 MSSQL 数据库;B) 如果 pymssql 不是从服务器导入的,它可以正常工作。然而,我确实认为这可能与 python 和 _mssql 处理套接字的方式和/或服务器处理套接字的方式有关......希望能有所帮助。

提前致谢

4

3 回答 3

2

错误代码WSAENOBUFS,虽然翻译成“没有可用的缓冲区空间”,但实际上意味着(引用我刚刚指出的 MSDN 页面):

由于系统缺少足够的缓冲区空间或队列已满,因此无法对套接字执行操作。

在实践中(如解释例如here)通常意味着(引用我刚刚指出的文章):

在大多数情况下,当打开的套接字总数达到某个神奇数字时,就会出现问题。MS 写道,这个限制是 3976 个同时打开的套接字,但在 Win9x 系统上,实际限制似乎要低得多。

由于每个套接字在关闭后会保持“忙碌”一段时间(该文章称 240 秒),因此在中等繁忙的服务器上轻松超过该数字(无论在 Windows 7 中可能是多少)也就不足为奇了,特别是因为桌面系统可能配置的套接字资源比真正的服务器系统少。

那篇文章指出了解决问题的几种可能性,尽管它们已经过时了。但是,关键是这似乎与 Python、Pylons、Paster 或 Pymssql 无关——这完全是 Windows 系统配置和控制的问题。因此,您在 serverfault.com 上询问可能会更好,因为精通服务器的 sysadms 经常出没!

于 2010-08-20T04:53:12.020 回答
1

好的。我终于得到了这个完全工作。如果 pymssql 在 python 中的 socket 之后导入,它似乎有一些问题,在 web 服务器上的 socket 之前导入它有点荒谬,所以我最终只是切换到 pyodbc,这与 pymssql 语法惊人地相似。绝对是一个很好的妥协...

于 2010-08-20T15:12:51.710 回答
0

看起来有人在http://code.google.com/p/pymssql/issues/detail?id=2发布了一个 pymssql 安装程序来解决这个问题。确保在运行此安装程序之前先卸载 pymssql,否则您最终可能仍会从损坏的版本导入。

如果您安装了 egg,您应该能够通过从 Python 安装目录(例如 C:\Python26)下的 lib\site-packages 中删除 pymssql* 目录来卸载它。

于 2010-12-16T22:38:06.530 回答