Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy查询未返回所有大文本字段_Python_Sql_Django_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy查询未返回所有大文本字段

Python SQLAlchemy查询未返回所有大文本字段,python,sql,django,sqlalchemy,Python,Sql,Django,Sqlalchemy,首先,这里有一点关于我的环境: 使用MSSMS作为我的数据库管理工具 使用Django 1.3 使用炼金术 我在数据库中有一个没有最大长度的文本字段。其中有890591个字符长的文本 当我使用SQLAlchemy检索此字段时,它被截断为64512个字符。我也尝试过其他几大行,它总是被截断为64512 SELECT@@TEXTSIZE返回一些荒谬的值,比如160万,所以这不是问题所在。如果我选择数据长度(字段),它将返回正确的890591。所以它似乎不是数据库,而是SQLAlchemy。或者可

首先,这里有一点关于我的环境:

  • 使用MSSMS作为我的数据库管理工具
  • 使用Django 1.3
  • 使用炼金术
我在数据库中有一个没有最大长度的文本字段。其中有890591个字符长的文本

当我使用
SQLAlchemy
检索此字段时,它被截断为64512个字符。我也尝试过其他几大行,它总是被截断为64512

SELECT@@TEXTSIZE
返回一些荒谬的值,比如160万,所以这不是问题所在。如果我选择数据长度(字段),它将返回正确的890591。所以它似乎不是数据库,而是
SQLAlchemy
。或者可能是某种Python限制

有什么想法吗?我似乎束手无策

编辑:以下是所请求的更多信息:

操作系统:Debian 5.0.9

SQLAlchemy:0.7.3

SQL:MS SQL Server 2008

数据库连接:mssql+pymssql://name:password@服务器/数据库名

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:46890 INFO sqlalchemy.engine.base.engine选择[RACReport\u 1]。id为[rac\u RACReport\u id],[RACReport\u 1]。客户端id为[rac\u RACReport\u client\u id],[RACReport\u rawdata],[RACReport\u 1]。rawdata为[rac\u RACReport\u rawdtime],[RACReport\u 1]。processeddata为[rac\u RACReport\u报告处理数据],[RACReport\u 1].processedtime为[rac_RACReport_processedtime],[RACReport_1]。reportstartdate为[rac_RACReport_reportstartdate],[RACReport_1]。reportenddate为[rac_RACReport_reportenddate]
来自rac。[RACReport]作为[RACReport_1]
其中[RACReport\u 1].id=%(id\u 1)s

2011-11-17 09:39:46890信息sqlalchemy.engine.base.engine{'id_1':'8fb76cb7-d752-45af-a20a-3b85d5e7b8a6'}

我对*nix与SQL Server的连接知之甚少,但简单的谷歌搜索表明问题与配置有关:

  • 关于SO的一个相关问题:
  • 另一个问答摘自:
  • 我的文本数据被截断或导致我的客户端中断

    文本数据类型不同于char和varchar类型。这个 文本列的最大数据长度由textsize控制 连接选项。Microsoft在其文档中声称使用 默认文本大小为4000个字符,但实际上是它们的实现 这是不一致的。有时返回的文本列大小为4 GB

    最好的解决方案是确保将textsize选项设置为 建立连接时的合理值。例如:

    另请参见freetds.conf中的文本大小选项



    还有一个附带说明:您似乎使用的是相当过时的版本。

    有点有趣,它的值与2^16-2^10相同。@BrianCain我也这么认为……您能用
    pdb
    pudb
    单步进入相关的
    SQLAlchemy
    代码吗?@BrianCain hmm…当我在pdb中运行它时,它对我来说已经崩溃了,因为它找不到一个变量,所以我认为pdb可能把它带出了范围或其他什么。不过,我是iPython的新手,所以明天我会让我的同事和pdb一起看一看。他今天也找不出解决问题的办法,所以自从他离开办公室后,我就一直在研究这个问题。回复查询:通过手动执行此查询,您仍然可以看到坏数据吗?您可以从MSSQL控制台尝试
    session.execute()
    pymssql.cursor().execute()
    。这可能有助于隔离数据被破坏的位置。从配置文件中删除文本大小限制,库(根据文档)的默认大小应该是非常大的!我不知道freeTDS是pymssql的后端。
    1> set textsize 10000 
    2> go