Pyodbc + Sqlalchemy + MSSQL标识符截断问题

时间:2013-09-06 19:08:16

标签: python sqlalchemy odbc pyodbc freetds

我有一个SQL Server 2005数据库,我试图在Linux上使用Sqlalchemy和Pyodbc从Python访问。最初我在Windows上编写的脚本运行良好,但是当我将它转移到Centos 6.4 64位服务器时,我遇到了一个问题。在进行查询时,我收到以下错误消息:

sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'TBL_WF_DESTINATION.DESTINATION_ID'"

我使用Sqlalchemy声明性语法,我的查询如下所示:

destinations = session.query(Destination).all()

其中Destination是映射到现有表的类。

先前的查询成功:

models = session.query(Model).all()

似乎Pyodbc在某种程度上存在超过30个字符的标识符问题 - TBL_WF_DESTINATION.DESTINATION_ID是33个字符长,而TBL_WF_MODEL.MODEL_ID是21.在一些广泛的谷歌搜索中,我遇到了一些30个字符标识符限制的引用 - 但是,在MSSQL上下文中从未提及它,并且所有帖子都来自一些几年前。 以下是我的一些代码定义:

engine = create_engine('mssql+pyodbc://name:password@dsn')

指定最大标签长度= 30实际上解决了问题,但我认为这是一种解决方法。

engine = create_engine('mssql+pyodbc://name:password@dsn', label_length=30)

大于30的任何内容都会破坏我的代码。

这是/etc/freetds.conf

[mssql_server]
host = some_ip_addr
port = 1433
tds version = 7.2

/etc/odbcinst.ini

[mssql]
Description     = FreeTDS for MSSQL
Driver          = /usr/lib64/libtdsodbc.so
Setup           = /usr/lib64/libtdsS.so
TDS Version = 7.2
FileUsage = 1

〜/ .odbc.ini的

[dsn]
Driver=mssql
Description=some description
Server=some_ip_addr
Database=db_name
Port=1433

Python 2.7.5,SQLAlchemy 0.8.2,pyodbc 3.0.7,freetds 0.91,unixODBC 2.2.14。

我的问题是 - 我做错了什么我不能使用超过30个字符的标识符?这对我来说似乎是一个非常人为的限制。有没有更好的方法让它发挥作用?

P.S。我可以使用pymssql后端运行相同的代码,但它没有原生的Decimal类型,因此我没有使用它。

0 个答案:

没有答案