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
- 使用炼金术
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的连接知之甚少,但简单的谷歌搜索表明问题与配置有关:
还有一个附带说明:您似乎使用的是相当过时的版本。有点有趣,它的值与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