2017-07-03 122 views
0

我一直試圖在運行SQLAlchemy = 1.1.11,pyodbc = 4.0.17和pymssql = 2.1的Windows Python 2.7(Anaconda安裝)環境中診斷問題。 3。SQLAlchemy將無法正確連接,但pyodbc和pymssql將

pyodbc和pymssql連接都將成功連接並正確查詢表。然而,當我試圖通過SQLAlchemy的相同的連接和查詢或者使用ORM或直接使用SQL時,出現以下錯誤:

sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column '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

經過對SQLAlchemy郵件列表的一些診斷後,看起來這是由於c擴展與服務器不兼容導致的。從站點包中的sqlalchemy目錄中刪除cresultproxy.pyd文件後,問題得到解決。

pip卸載/安裝沒有解決問題,因爲擴展在安裝期間被重建。 c擴展版本沒有發出任何警告或錯誤。它看起來像這可能是舊的Windows Server 2008服務器配置的邊緣情況下不能正確使用c擴展。