[英]SQLAlchemy Query not returning all of large text field
首先,這里有一點關於我的環境:
我在數據庫中有一個沒有最大長度的文本字段。 其中有文本長度為890591個字符。
當我使用SQLAlchemy
檢索此字段時,它被截斷為64512個字符。 我也嘗試過其他幾個大行,它總是被截斷為64512。
SELECT @@TEXTSIZE
返回一些荒謬的值,如160萬,所以這不是問題。 如果我執行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版本: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 [rac_RACReport_rawdata], [RACReport_1].rawtime AS [rac_RACReport_rawtime], [RACReport_1].processeddata AS [rac_RACReport_processeddata], [RACReport_1].processedtime AS [rac_RACReport_processedtime], [RACReport_1].reportstartdate AS [rac_RACReport_reportstartdate], [RACReport_1].reportenddate AS [rac_RACReport_reportenddate] FROM rac.[RACReport] AS [RACReport_1] WHERE [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'}
我對與SQL Server的* nix連接知之甚少,但簡單的谷歌搜索表明該問題與FreeTDS配置有關:
我的文本數據被截斷或導致我的客戶端中斷。
文本數據類型與char和varchar類型不同。 文本列的最大數據長度由textsize連接選項控制。 Microsoft在其文檔中聲稱使用4000個字符的默認文本大小,但實際上它們的實現不一致。 有時會返回大小為4 GB的文本列!
最佳解決方案是確保在建立連接時將textsize選項設置為合理的值。 例如:
1> set textsize 10000
2> go
另請參見freetds.conf中的text size選項。
而且只是旁注:您似乎使用了相當過時的pymssql
版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.