SQLAlchemy没有正确连接,但pyodbc和pymssql会

时间:2017-07-03 19:53:54

标签: sql-server python-2.7 sqlalchemy

我一直在尝试在运行SQLAlchemy = 1.1.11,pyodbc = 4.0.17和pymssql = 2.1.3的Windows Python 2.7(Anaconda安装)环境中诊断该问题。

pyodbc和pymssql连接都将成功连接并正确查询表。但是,当我尝试使用ORM或直接SQL通过SQLAlchemy进行相同的连接和查询时,它会失败,并显示以下错误:

  

sqlalchemy.exc.NoSuchColumnError:"找不到列中的列' 0'

我使用的连接字符串如下:

'mssql+pyodbc://:@CMPDSQL01:1433/CMP?driver=SQL+Server+Native+Client+10.0'

通过pyodbc的连接和简单查询使用以下内容:

print "---- Testing pyodbc Directly"
cnxn = pyodbc.connect(
    r'Trusted_Connection=yes;'
    r'DRIVER={SQL Server Native Client 10.0};'
    r'SERVER=CMPDSQL01;'
    r'DATABASE=CMP;'
    )

print cnxn
print "---- Complete ----"

print "---- Running Direct SQL Query on pyodbc Direct Connection"
cursor = cnxn.cursor()
cursor.execute('SELECT * FROM EPO_MODELS')
for r in cursor:
    print r
print "---- Complete ----"

通过pymssql的连接和简单查询使用以下内容:

print "---- Testing pymssql Directly"
cnxn = pymssql.connect(server='CMPDSQL01', port='1433', database='CMP')
print cnxn
print "---- Complete ----"

print "---- Running Direct SQL Query on pymssql Direct Connection"
cursor = cnxn.cursor()
cursor.execute('SELECT * FROM EPO_MODELS')
for r in cursor:
    print r
print "---- Complete ----"

更令人困惑的是SQLAlchemy连接曾经工作但现在不再有效。不幸的是,由于干净的启动安装,我不知道是什么打破了它。

我不认为EPO_MODELS对象模型会发生此错误,因为即使是直接的SQL查询也会以同样的方式失败。但是,为了完整性,EPO_MODELS对象模型非常简单,如下所示:

class EPO_MODELS(Base):
    __tablename__ = 'EPO_MODELS'

    ID = Column(Integer, primary_key=True, autoincrement=False)
    MODELTYPE = Column(Integer, autoincrement=False)
    MODELNAME = Column(NVARCHAR(255))
    MEMO = Column(NVARCHAR(2000))
    NEXTUNIQUEID = Column(Integer, autoincrement=False)
    MODELSYNC = Column(Integer, autoincrement=False)
    MODELSTATUS = Column(Integer, autoincrement=False)
    AUDITUSERID = Column(Integer, autoincrement=False)
    DATEALTERED = Column(DateTime)
    CREATIONDATE = Column(DateTime)

使用上面的连接字符串获取会话后,直接SQLAlchemy查询如下所示:

print "---- Running Direct SQL Query Through SQLAlchemy Connection"
result = con.execute('SELECT * FROM EPO_MODELS')
for r in result:
    print r
print "---- Complete ----"

非常感谢任何有关这里发生的事情的见解。我似乎无法找到断开连接。提前谢谢。

1 个答案:

答案 0 :(得分:0)

在SQLAlchemy邮件列表上进行一些诊断后,看起来这是由于c扩展与服务器不兼容引起的。从site-packages中的sqlalchemy目录中删除 cresultproxy.pyd 文件后,问题已解决。

由于在安装期间重建了扩展,因此pip uninstall / install无法解决问题。 c扩展构建没有发出任何警告或错误。看起来这可能是旧的Windows Server 2008服务器配置与c扩展无法正常工作的边缘情况。