Sql server SQLAlchemy赢了';无法正确连接,但pyodbc和pymssql将

Sql server SQLAlchemy赢了';无法正确连接,但pyodbc和pymssql将,sql-server,python-2.7,sqlalchemy,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

我一直在尝试在运行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'
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 ----"
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 ----"
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)
通过pyodbc的连接和简单查询使用以下内容:

'mssql+pyodbc://:@CMPDSQL01:1433/CMP?driver=SQL+Server+Native+Client+10.0'
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 ----"
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 ----"
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)
通过pymssql的连接和简单查询使用以下内容:

'mssql+pyodbc://:@CMPDSQL01:1433/CMP?driver=SQL+Server+Native+Client+10.0'
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 ----"
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 ----"
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连接过去可以工作,但现在已经不工作了。不幸的是,我不知道是什么原因导致它因为一个干净的开始安装而中断

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

'mssql+pyodbc://:@CMPDSQL01:1433/CMP?driver=SQL+Server+Native+Client+10.0'
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 ----"
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 ----"
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 ----"

非常感谢您能深入了解这里的情况。我似乎找不到断开连接的地方。提前谢谢。

在对SQLAlchemy邮件列表进行诊断后,这似乎是由于c扩展与服务器不兼容造成的。从SQLAlchemy邮件列表中删除cresultproxy.pyd文件后站点包中的目录问题已解决

pip卸载/安装没有修复此问题,因为在安装过程中重新生成了扩展。c扩展生成没有发出任何警告或错误。看起来这可能是旧Windows Server 2008服务器配置无法与c扩展正常工作的边缘情况