我有一个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类型,因此我没有使用它。