LINUX.ORG.RU

Python (через odbc) вешает MSSQL

 , , ,


0

1

Добрый день. Есть база MSSQL на 4000 записей.

id,name,ip,comminity
1,host1,192.168.0.1,pblic
2,host2,192.168.0.2,pblic
3,host3,192.168.0.3,pblic
..
Делаю обычную выборку записей и тут же их печатаю, что приводит к зависанию MSSQL сервера, во время работы срипта срвер не может отвечать больше ни на какие запросы. А пару раз вообще зависал так что переставал отвечать по сети (пришлось ребутить).
Установлен Python 2.7.6, python-pyodbc 3.0.6-2, freetds 0.91-5

В чем косяк? почему вешается MSSQL?
Есть смутное подозрение что при каждом прохождении цикла сервер выдает все записи те 4000 (в каждом отснифаном пакете-ответе больше чем одна строка). Скрипт смотрит 1, а что бы посмотреть следующею - опять запрашивает (получает) полный список, что приводит к лавинообразному росту нагрузки. Подскажите куда копать? как оптимизировать запрос\скрипт\настройки tds,odbc?

#!/usr/bin/env python
import pyodbc
cnx = pyodbc.connect("DSN=srv;DATABASE=base;UID=user;PWD=123" )
cursor = cnx.cursor()
cursor.execute("SELECT [IP],[Name] FROM [Nodes]")

row = cursor.fetchone()
while row:
   IP = row[0]
   Name = row[1]
   print Name,IP
   row = cursor.fetchone()
freetds.conf
[global]
    tds version = 8.0
    port = 1433
    text size = 64512
    try server login = yes
    try domain login = no
    client charset = UTF-8
[srv]
    host = 172.25.2.1
    port = 1433
    tds version = 8.0


odbc.ini 
[srv]
    Description=Server
    Driver=FreeTDS
    Servername=srv


Последнее исправление: DeeZ (всего исправлений: 1)

В питоноскрипте проблем вроде нет.

anonymous
()

Есть база MSSQL на 4000 записей.

1. Смени это БД-поделие на что-либо нормальное.

2. Если п.1 невыполним - то на винфак.

Siado ★★★★★
()
Последнее исправление: Siado (всего исправлений: 1)

Питон не Б-Гугоден. Вот и m$$ql виснет. Либо отказывайся от m$$ql, либо переходи на c# или что у них есть ещё там.

te111011010
()

Забил на этот глюк. делаю полную выгрузку в потом уже с ней работаю, отключаясь от базы.

#row = cursor.fetchone()
#while row:
rows = cursor.fetchall()
cursor.close()
del cursor
cnx.close()
for row in rows:
...
.

DeeZ
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.