使用SQL Alchemy和pyodbc与IronPython 2.6.1

时间:2010-06-08 15:01:52

标签: sqlalchemy ironpython smo cpython pyodbc

我正在使用IronPython和clr模块通过SMO检索SQL Server信息。我想使用SQL Alchemy在SQL Server数据库中检索/存储这些数据,但是在加载pyodbc模块时遇到了一些问题。

以下是设置:

  • IronPython 2.6.1(安装在D:\ Program Files \ IronPython)
  • CPython 2.6.5(安装在D:\ Python26)
  • SQL Alchemy 0.6.1(安装在D:\ Python26 \ Lib \ site-packages \ sqlalchemy)
  • pyodbc 2.1.7(安装在D:\ Python26 \ Lib \ site-packages)

我在IronPython site.py中有这些条目来导入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 Alchemy在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中运行良好,但看起来无法从IronPython访问pyodbc模块。

有什么建议吗?我意识到这可能不是解决问题的最佳方式,所以我愿意以不同的方式解决这个问题。只是想获得使用SQL Alchemy和pyodbc的一些经验。

4 个答案:

答案 0 :(得分: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驱动程序。

答案 1 :(得分:0)

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

您只需要确保adodbapi包在sys.path上,然后在连接字符串中使用'mssql + adodbapi://'而不是'mssql://'。

答案 2 :(得分:0)

adodbapi似乎是要走的路,但这里是adodbapi.py的一个片段,它附带了方言文件夹下的SQL Alchemy

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

"""

答案 3 :(得分:0)

SQLAlchemy不能直接在IronPython下运行,因为pyodbc目前与IronPython不兼容。

但是,您可以在IronPython下使用pypyodbc作为dbi-2.0投诉库,类似于pyodbc,并允许在Ironpython下运行sqlalchemy,this How-to描述了启用它的4个步骤。

免责声明:我是pypyodbc的主要人物。