2010-06-08 71 views
1

我正在使用IronPython和clr模塊通過SMO檢索SQL Server信息。我想使用SQL Alchemy在SQL Server數據庫中檢索/存儲這些數據,但在加載pyodbc模塊時遇到了一些麻煩。在IronPython 2.6.1中使用SQL Alchemy和pyodbc

這裏的設置:

  • 的IronPython 2.6.1(安裝在d:\ Program Files文件\ IronPython的)
  • CPython的2.6.5(安裝在d:\ Python26)
  • SQL鍊金術0.6 0.1(安裝在d:\ Python26 \ LIB \站點包\ SQLAlchemy的)
  • pyodbc 2.1.7(安裝在d:\ Python26 \ LIB \站點包)

我有這些電子在IronPython的site.py ntries進口CPython的標準和第三方庫:

# Add CPython standard libs and DLLs 
import sys 
sys.path.append(r"D:\Python26\Lib") 
sys.path.append(r"D:\Python26\DLLs") 
sys.path.append(r"D:\Python26\lib-tk") 
sys.path.append(r"D:\Python26") 

# Add CPython third-party libs 
sys.path.append(r"D:\Python26\Lib\site-packages") 

# sqlite3 
sys.path.append(r"D:\Python26\Lib\sqlite3") 

# Add SQL Server SMO 
sys.path.append(r"D:\Program Files\Microsoft SQL Server\100\SDK\Assemblies") 
import clr 
clr.AddReferenceToFile('Microsoft.SqlServer.Smo.dll') 
clr.AddReferenceToFile('Microsoft.SqlServer.SqlEnum.dll') 
clr.AddReferenceToFile('Microsoft.SqlServer.ConnectionInfo.dll') 

SQL鍊金術進口IronPython的OK,把試圖連接到SQL Server時,我收到此錯誤信息:

IronPython 2.6.1 (2.6.10920.0) on .NET 2.0.50727.3607 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sqlalchemy 
>>> e = sqlalchemy.MetaData("mssql://") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "D:\Python26\Lib\site-packages\sqlalchemy\schema.py", line 1780, in __init__ 
    File "D:\Python26\Lib\site-packages\sqlalchemy\schema.py", line 1828, in _bind_to 
    File "D:\Python26\Lib\site-packages\sqlalchemy\engine\__init__.py", line 241, in create_engine 
    File "D:\Python26\Lib\site-packages\sqlalchemy\engine\strategies.py", line 60, in create 
    File "D:\Python26\Lib\site-packages\sqlalchemy\connectors\pyodbc.py", line 29, in dbapi 
ImportError: No module named pyodbc 

這段代碼在CPython中工作得很好,但它看起來像pyodbc模塊不能從IronPython訪問。

有什麼建議嗎?我意識到這可能不是解決問題的最佳方式,所以我願意以不同的方式解決這個問題。只是想獲得一些使用SQL Alchemy和pyodbc的經驗。

回答

2

它很有可能是pyodbc與IronPython不兼容,因爲它是爲使用cPython而設計的。 IronPython當然有一些ODBC(實際上,ADO.net似乎就像它在哪裏)的兼容性,但是DBAPI將是獲得SQLAlchemy的最直接的方式。

所以這裏的一些MS-特定的非DBAPI例如:http://www.ironpython.info/index.php/Accessing_SQL_Server 有人在2006年談論DBAPI:http://hex-dump.blogspot.com/2006/10/ironpython-and-adonet-part-2.html 一些更近期的:http://bitbucket.org/jdhardy/adonet-dbapi/

它說的東西,MS盆滿鉢滿然而多少錢到IronPython的,但零轉換爲兼容的DBAPI驅動程序。

0

您可以嘗試使用SQLAlchemy的adodbapi支持;最新版本的adodbapi(2.3.0)支持IronPython。

您應該只需確保adodbapi包在sys.path上,然後在連接字符串中使用'mssql + adodbapi://'而不是'mssql://'。

0

adodbapi似乎要走的路,但這裏從adodbapi.py的一個片段,方言下的船舶與SQL鍊金術文件夾

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

""" 
1

的SQLAlchemy不能直接IronPython的下運行,因爲目前pyodbc不兼容IronPython的。

但是,您可以在IronPython下使用pypyodbc作爲dbi-2。0投訴庫,它類似於pyodbc,並且允許在Ironpython下運行sqlalchemy,this How-to描述了啓用它的4個步驟。

聲明:我是pypyodbc的主要人員。

+1

感謝您發佈您的答案!請務必仔細閱讀[自助推廣常見問題](http://stackoverflow.com/faq#promotion)。另請注意,每次鏈接到您自己的網站/產品時,您都必須*發佈免責聲明。 – 2013-03-08 13:18:52

+0

https://code.google.com/p/pypyodbc/wiki/Enable_SQLAlchemy_on_IronPython – cmotley 2013-03-22 20:49:55