【问题标题】:SQLAlchemy won't connect correctly but pyodbc and pymssql willSQLAlchemy 无法正确连接,但 pyodbc 和 pymssql 会
【发布时间】: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


    【解决方案1】:

    在 SQLAlchemy 邮件列表上进行了一些诊断后,看起来这是由于 c 扩展与服务器不兼容造成的。从站点包中的 sqlalchemy 目录中删除 cresultproxy.pyd 文件后,问题得到解决。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 2015-08-02
      • 2014-12-31
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      相关资源
      最近更新 更多