簡體   English   中英

SQLAlchemy Query不返回所有大文本字段

[英]SQLAlchemy Query not returning all of large text field

首先,這里有一點關於我的環境:

  • 使用MSSMS作為我的數據庫管理工具。
  • 使用Django 1.3
  • 使用SQLAlchemy

我在數據庫中有一個沒有最大長度的文本字段。 其中有文本長度為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配置有關:

  1. 關於SO的相關問題: 數據以64512個字符結束 - MSSQL // PHP // OPENSUSE // APACHE2
  2. 這里提取的另一個問答:

我的文本數據被截斷或導致我的客戶端中斷。

文本數據類型與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM