代码之家  ›  专栏  ›  技术社区  ›  Joshkunz

在Web服务器上通过python使用Microsoft SQL

  •  0
  • Joshkunz  · 技术社区  · 15 年前

    我尝试从一个挂架(基于粘贴器)的Web服务器运行一些查询到数据库,每次我尝试导入我使用的pymsql库时, this one 顺便说一句)我一直在出错:

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

    关于进口。我还尝试使用sqlAlchemy,并在尝试创建sqlAlchemy引擎时获得完全相同的错误。我能做些什么来让这个工作吗?我没有连接到web服务器或pymsql库,所以其他的都可以。

    环境信息:

    我用的机器是A32bit Win7桌面 服务器在python virtualenv环境中运行,但是pymsql库在虚拟环境中工作得很完美,而不是在服务器上。

    更新:

    更多背景信息(和解释): 我认为这在某种程度上不是MSSQL问题,甚至不是Python问题。有两个原因:a)出现此问题时,我和其他人仍然可以连接到MSSQL数据库;b)如果没有从服务器导入PYMSSQL,PYMSSQL工作正常。不过,我认为这可能与Python和MSSQL处理套接字的方式和/或服务器处理套接字的方式有关…希望能帮上一点忙。

    提前谢谢

    3 回复  |  直到 15 年前
        1
  •  2
  •   Alex Martelli    15 年前

    错误代码 WSAENOBUFS 在翻译成“没有可用的缓冲空间”时,实际上是指(引用我刚才提到的msdn页面):

    套接字上的操作不能 因为系统缺乏而执行 足够的缓冲空间或因为 队列已满。

    在实践中(如 here )通常是指(引用我刚才提到的文章):

    在大多数情况下,当 打开的套接字总数达到 一些神奇的数字。女士写道 这个极限同时是3976 打开了插座,但似乎打开了 Win9x系统真正的极限是 较低。

    由于每个套接字在关闭后(240秒,那篇文章说)会很长一段时间保持“忙碌”,所以在一个中等繁忙的服务器上看到这个数字(无论在Windows7中是什么)很容易超过,这并不奇怪,特别是因为桌面系统配置的套接字资源可能比真正的服务器系统少。

    那篇文章指出了解决这个问题的几种可能性,尽管它们已经过时了。但关键是,这似乎与python、pylons、paster或pymsql无关——这严格来说是Windows系统配置和控制的问题。因此,您最好在serverfault.com上查询,了解服务器的sysadm在哪里?

        2
  •  1
  •   Joshkunz    15 年前

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

        3
  •  0
  •   ReWrite    15 年前

    似乎有人发布了pymsql的安装程序,该安装程序在 http://code.google.com/p/pymssql/issues/detail?id=2 . 在运行此安装程序之前,请确保先卸载pymsql,否则仍可能从损坏的版本导入。

    如果安装了e g g,则可以通过从python安装目录(例如c:\python26)下的lib\site包中删除pymsql*目录来卸载它。