Python с MS SQL – усеченный вывод

Я пытаюсь подключиться к MSSQL DB с помощью python из Linux ( Python 2.7 , Ubuntu 11.04 ) . Вывод, который я получаю, усекается до 500 символов. Пожалуйста, просмотрите сценарии и конфиги ниже. Как это можно решить? Проблема, которую я предполагаю в драйвере ODBC или рядом с ним.

Код (pyodbc, pymssql):

conn = pymssql.connect(host='my_remote_host', user='ro_user', password='password', database='current', as_dict=True) cur = conn.cursor() cur.execute(sql) for i in cur: print i conn.close() cnxn = pyodbc.connect(driver='FreeTDS', server='my_remote_host', database='current', uid='ro_user', pwd='password') cursor = cnxn.cursor() cursor.execute(sql) rows = cursor.fetchall() ... cnxn.close() 

У меня нет доступа для записи в MS SQL DB, это фактически удаленный сервер, который не принадлежит нашей системе.

SQL:

 sql = ''' SELECT Req.ID, ShReq.Summary AS [Short Name], ShReq.ALM_SharedText AS [Text], Req.ContainedBy, Req.DocumentID FROM CurMKS..ALM_Requirement Req JOIN CurMKS..ALM_SharedRequirement ShReq ON Req.[References] = ShReq.ID WHERE DocumentID = 1111111''' 

Проблема заключается в поле ShReq.ALM_SharedText . Он усечен до 255 символов, но с использованием преобразований, таких как convert(text,ShReq.ALM_SharedText) AS TEXT и CAST(ShReq.ALM_SharedText AS TEXT) я увеличиваю усечение до 500 символов. Однако есть поля с более длинным текстом, чем 500 символов, и они усекаются.

Настройки ODBC:

/etc/odbc.ini :

 [MKS] #Driver=FreeTDS Driver=/usr/lib/odbc/libtdsodbc.so Description=Database Trace=No Server=my_remote_host Port=1433 Database=current UID=ro_user PWD=password TDS Version=8.0 

/etc/odbcinst.ini :

 [FreeTDS] Description=FreeTDS Driver=/usr/lib/odbc/libtdsodbc.so UsageCount=1 

/etc/freetds/freetds.conf :

 [global] tds version = 8.0 ; dump file = /tmp/freetds.log ; debug flags = 0xffff ; timeout = 10 ; connect timeout = 10 ; text size = 2097152 [mksserver] host = my_remote_host port = 1433 tds version = 8.0 client charset = UTF-8 

Любые мысли о том, как это можно решить?

  • SqlAlchemy эквивалент строки соединения podbcc с использованием FreeTDS
  • Запись csv-файла в базу данных SQL Server с использованием python
  • хранимые процедуры с sqlAlchemy
  • Запись больших данных данных Pandas в базу данных SQL Server
  • Как подключиться к SQL Server через sqlalchemy с помощью проверки подлинности Windows?
  • SQL Server, Python и OS X
  • sqlalchemy подключиться к серверу, не указывая базу данных
  • SQLAlchemy не может подключиться к базе данных mssql
  • 2 Solutions collect form web for “Python с MS SQL – усеченный вывод”

    Измените text size в global разделе freetds.conf до максимума (4294967295 байт):

     [global] tds version = 8.0 text size = 4294967295 

    Также необходимо установить TEXTSIZE в SQL максимум (2147483647 байт):

     sql = """ SET TEXTSIZE 2147483647; SELECT Req.ID, ShReq.Summary AS [Short Name], ShReq.ALM_SharedText AS [Text], Req.ContainedBy, Req.DocumentID FROM CurMKS..ALM_Requirement Req JOIN CurMKS..ALM_SharedRequirement ShReq ON Req.[References] = ShReq.ID WHERE DocumentID = 111111; """ 

    Если вы используете более старую версию pymssql (1.0.2), существуют определенные ограничения.

    Данные varchar и nvarchar ограничены 255 символами, а более длинные строки молчатся. Это известное ограничение протокола TDS. Обходным путем является CAST или CONVERT эта строка или выражение для текстового типа данных, способного возвращать 4000 символов.

    источник: http://pymssql.sourceforge.net/limitations.php

    Python - лучший язык программирования в мире.