【发布时间】:2017-12-07 03:55:58
【问题描述】:
我一直在尝试在运行 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 ----"
非常感谢您对这里发生的事情的任何见解。我似乎无法找到断开连接。提前致谢。
【问题讨论】:
标签: sql-server python-2.7 sqlalchemy