2012-07-25 80 views
1

我試圖連接到一個MSSQL的SQLExpress使用SQLAlchemy的0.7.8和adodapi 2.4.2.2對IronPython的2012數據庫2.7.3SQLAlchemy的和adodbapi數據庫連接錯誤

我能創造一個SQLAlchemy的引擎然而,當進行查詢時,我得到: 「類型錯誤: 'NoneType' 對象是unsubscriptable」

回溯:使用

Traceback (most recent call last): 
    File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\engine\base.py", line 878, in __init__ 
    File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\engine\base.py", line 2558, in raw_connection 
    File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\pool.py", line 183, in unique_connection 
    File "<string>", line 9, in <module> 
    File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\engine\base.py", line 2472, in connect 
TypeError: 'NoneType' object is unsubscriptable 

代碼:

def conn(): 
    return adodbapi.connect('Provider=SQLOLEDB; Data Source=SERVER\SQLEXPRESS; 
          Initial Catalog=db; User ID=user; Password=pass;') 
engine = create_engine('mssql+adodbapi:///', creator=conn, 
         echo = True, module=adodbapi) 

adodbapi似乎對自己的工作很好,即。我可以創建一個連接,然後使用遊標進行查詢,沒有任何問題,它似乎是sqlalchemy中的一些東西。

任何任何想法?

+0

你可以上傳你的查詢代碼嗎? – 2012-07-26 07:01:59

+0

爲了使它失敗,所有你需要做的就是調用engine.connect(),它甚至出來之前,它失敗了db – Sigma 2012-07-26 09:25:33

+1

爲什麼不嘗試pyodbc而不是adodapi? – 2012-07-26 09:44:17

回答

3

我們有一個解決辦法:

import adodbapi 
from sqlalchemy.engine import create_engine 
from sqlalchemy.orm import sessionmaker 
import sqlalchemy.pool as pool 

def connect(): 
    return adodbapi.connect('Provider=SQLOLEDB.1;Data Source=mypcname\SQLEXPRESS;\ 
         Initial Catalog=dbname;User ID=user; Password=pass;') 

mypool = pool.QueuePool(connect) 
conn = mypool.connect() 
curs = conn.cursor() 
curs.execute('select 1') #anything that forces open the connection 

engine = create_engine('mssql+adodbapi://', module=adodbapi, pool = mypool) 

Session = sessionmaker() 
Session.configure(bind=engine) 
sess = Session() 

有了這個我會話對象正常的結果。

我可能不會按照任何人的意圖使用adodbapi方言,但我找不到任何文檔,所以這就是我現在所做的。

0

很確定adodbapi不適用於SQLAlchemy。

The adodbapi dialect is not implemented for 0.6 at this time.

滾動至最底部,(這是0.7倍文檔),我還檢查0.8文檔和它說同樣的事情。

聽起來像你必須改變你正在使用的驅動程序。

+0

根據http://docs.sqlalchemy.org/en/rel_0_7/core/engines.html#supported-databases支持,並且他們已經實施了一種方言。我必須自己去調試它,sqlalchemy的支持在那裏,但似乎是初步的。 – Sigma 2012-07-25 23:40:40

0

我使用sqlalcmy連接到使用psycopg2的postgresql數據庫。我不確定,但通過閱讀文檔,我認爲你需要下載pyodbc,它似乎比adodbapi更好的支持。一旦你已經安裝了它,試試下面的語句來創建發動機

engine = create_engine(mssql+pyodbc://user:[email protected]/db) 

或者你可以檢查出書寫連接字符串here不同的方式。

+0

不幸的是pyodbc不能在IronPython上工作,我因爲應用程序的不尋常性而陷入了困境。 – Sigma 2012-07-26 13:46:51

+0

你說得對。顯然,pyodbc不適用於IronPython。也許這些鏈接應該幫助你出來http://stackoverflow.com/questions/2998558/using-sql-alchemy-and-pyodbc-with-ironpython-2-6-1 http://stackoverflow.com/questions/455469/ IronPython的-DB-API-2-0 – 2012-07-27 05:04:41