Использование Microsoft SQL через python на веб-сервере - PullRequest
0 голосов
/ 20 августа 2010

Я пытаюсь выполнить некоторые запросы к базе данных с веб-сервера pylons (на основе paster) и каждый раз, когда пытаюсь импортировать библиотеку pymssql, которую я использую (кстати, эта )) Я получаю эту ошибку:

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

при импорте.Я также пытался использовать sqlalchemy и получал ту же ошибку, когда пытался создать движок sqlalchemy.Есть ли что-нибудь, что я могу сделать, чтобы заставить это работать.Я не подключен к веб-серверу или библиотеке pymssql, так что с остальными все в порядке.

Информация об окружении:

Используемая мной машина - это 32-битная операционная система win7, сервер работает в питонеСреда virtualenv, но библиотека pymssql работает безупречно в виртуальной среде, а не на сервере

ОБНОВЛЕНИЕ:

Немного дополнительной справочной информации (и пояснений): я не думаю, что этопроблема MSSQL или даже проблема с питоном.по двум причинам: A) Я и другие все еще можем подключаться к базе данных MSSQL, пока возникает эта проблема, и B) pymssql работает отлично, если он не импортируется с сервера.Однако я думаю, что это может иметь какое-то отношение к тому, как python и _mssql работают с сокетами, и / или к тому, как сервер работает с сокетами ... надеюсь, это поможет немного больше.

заранее спасибо

Ответы [ 3 ]

2 голосов
/ 20 августа 2010

Код ошибки WSAENOBUFS , хотя переводится как «Нет доступного места в буфере», фактически означает (цитируя страницу MSDN, на которую я только что указал):

Операция над сокетом не может быть выполняется из-за отсутствия системы достаточно буферного пространства или потому что очередь была переполнена.

и на практике (как объяснено, например, здесь ) обычно означает (цитируя только что указанную статью):

в большинстве случаев проблема возникает, когда общее количество открытых сокетов достигает какой-то магический номер. MS пишет, что этот предел составляет 3976 одновременно открытые розетки но похоже что на Системы Win9x реальный предел много ниже.

Поскольку каждый сокет остается «занятым» довольно долго после его закрытия (240 секунд, говорится в этой статье), неудивительно, что это число (каким бы оно ни было в Windows 7) легко превышается на умеренно занятый сервер, тем более что настольная система вполне может быть настроена с меньшим количеством ресурсов сокетов, чем реальная серверная система.

Эта статья указывает на несколько возможностей решения проблемы, хотя они и устарели. Но ключевой момент заключается в том, что это, похоже, не имеет ничего общего с Python, Pylons, Paster или Pymssql - это строго проблема конфигурации и управления системой Windows. Поэтому вам, возможно, повезет больше, если вы спросите на serverfault.com, где тусуются серверные подкованные системы!

1 голос
/ 20 августа 2010

Хорошо.Я наконец получил это полностью работающим.У pymssql, похоже, есть некоторые проблемы, если он импортируется после сокета в python, импортировать его до сокетов на веб-сервере немного нелепо, поэтому я просто переключился на pyodbc, который удивительно похож на синтаксис pymssql.Определенно хороший компромисс ...

0 голосов
/ 17 декабря 2010

Похоже, что кто-то опубликовал установщик для pymssql, который исправляет эту проблему на http://code.google.com/p/pymssql/issues/detail?id=2. Убедитесь, что сначала удалили pymssql перед запуском этого установщика, либо вы все равно можете в конечном итоге импортировать из сломанной версии.

Если вы установили egg, вы сможете удалить его, удалив каталог pymssql * из lib \ site-packages в вашем каталоге установки Python (например, C: \ Python26).

...