Sql server SQLAlchemy赢了';无法正确连接,但pyodbc和pymssql将
我一直在尝试在运行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”的行中找到列” 我使用的连接字符串如下所示: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
'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扩展正常工作的边缘情况