SQLAlchemy Query не возвращает все большое текстовое поле

Прежде всего, расскажу немного о моей среде:

  • Использование MSSMS в качестве инструмента управления базой данных.
  • Использование Django 1.3
  • Использование SQLAlchemy

У меня есть текстовое поле в базе данных без максимальной длины. В нем есть текст длиной 890591 символ.

Когда я извлекаю это поле с помощью SQLAlchemy , оно усекается до 64512 символов. Я пробовал это и с несколькими другими большими строками, и он всегда усекается до 64512.

SELECT @@ TEXTSIZE возвращает какое-то абсурдное значение, например 1,6 миллиона, так что проблема не в этом. Если я сделаю SELECT DATALENGTH (field) , он вернет правильный 890591. Так что это не похоже на базу данных, это похоже на SQLAlchemy . Или, возможно, это может быть какой-то предел Python.

Есть идеи? Кажется, я в своем уме.

РЕДАКТИРОВАТЬ: Вот еще некоторая запрошенная информация:

ОС: Debian 5.0.9

SQLAlchemy: 0.7.3

SQL: MS Sql Server 2008

Соединение с БД: mssql + pymssql: / / name: password @ server / dbname

pymssql version: 1.0.2

Рассматриваемая модель:

class RACReport(Base):
    __tablename__ = 'RACReport'
    id                      = Column(properUUID(), primary_key=True, nullable=False, default=genuuid4, server_default=text('NEWID()'))
    client_id               = Column(properUUID(), ForeignKey(Client.id), nullable=False)
    rawdata                 = Column(Text(), nullable=True)
    rawtime                 = Column(DateTime(), nullable=True, default=datetime.datetime.now())
    processeddata           = Column(Text(), nullable=True)
    processedtime           = Column(DateTime(), nullable=True)
    reportstartdate         = Column(DateTime(), nullable=False)
    reportenddata           = Column(DateTime(), nullable=False)
    numberofdocs            = Column(Integer(), nullable=True)
RACReport.__table__.schema='rac'

class properUUID(st.TypeDecorator):
    impl = mssql.MSUniqueIdentifier
    def process_result_value(self, value, dialect):
        if value:
            return str(uuid.UUID(bytes_le=value))

def genuuid4():
    return str(uuid.uuid4())

rawdata и processdata - это два поля, с которыми у него возникла проблема.

Вот тестовый запрос и эхо:

rac.session.query (rac.RACReport) .filter (rac.RACReport.id == '8fb76cb7-d752-45af-a20a-3b85d5e7b8a6'). All ()

2011-11-17 09: 39: 46,890 INFO sqlalchemy.engine.base.Engine SELECT [RACReport_1] .id AS [rac_RACReport_id], [RACReport_1] .client_id AS [rac_RACReport_client_id], [RACReport_1] .rawdata AS]. , [RACReport_1] .rawtime AS [rac_RACReport_rawtime], [RACReport_1] .processeddata AS [rac_RACReport_processeddata], [RACReport_1] .processedtime AS [rac_RACReport_processedtime], [RACReport_RACReport_processedtime], [RACReport_RACReport_processedRAC]. ОТ rac. [RACReport] AS [RACReport_1] ГДЕ [RACReport_1] .id =% (id_1) s 2011-11-17 09: 39: 46,890 INFO sqlalchemy. engine.base.Engine {'id_1': '8fb76cb7-d752-45af-a20a-3b85d5e7b8a6'}

5
задан MatthewKremer 17 November 2011 в 15:52
поделиться