我一直在尝试在运行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 ----"
非常感谢任何有关这里发生的事情的见解。我似乎无法找到断开连接。提前谢谢。
答案 0 :(得分:0)
在SQLAlchemy邮件列表上进行一些诊断后,看起来这是由于c扩展与服务器不兼容引起的。从site-packages中的sqlalchemy目录中删除 cresultproxy.pyd 文件后,问题已解决。
由于在安装期间重建了扩展,因此pip uninstall / install无法解决问题。 c扩展构建没有发出任何警告或错误。看起来这可能是旧的Windows Server 2008服务器配置与c扩展无法正常工作的边缘情况。