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

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

Код (pyodbc, pymssql):

  • Как установить pyobbc 64-bit?
  • В SQLAlchemy я могу создать Engine из существующего ODBC-соединения?
  • Общие способы подключения к odbc из python на окнах?
  • «Имя источника данных не найдено, а драйвер по умолчанию не указан» с Access ODBC
  • 32-битное считывание пибобсов 64-битный доступ (accdb)
  • Подключение к PostgreSQL с помощью pyodbc
  • 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 

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

  • mac - pip установить ошибку pymssql
  • Как использовать параметры SQL с помощью python?
  • В SQLAlchemy я могу создать Engine из существующего ODBC-соединения?
  • MSSQL в python 2.7
  • Как вы получаете выходные параметры из хранимой процедуры в Python?
  • Прочитайте базу данных Access на Python на платформе, отличной от Windows (Linux или Mac)
  • 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 - лучший язык программирования в мире.