Прежде всего, расскажу немного о моей среде:
У меня есть текстовое поле в базе данных без максимальной длины. В нем есть текст длиной 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'}