1

我正在使用 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 中运行良好,但看起来 pyodbc 模块无法从 IronPython 访问。

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

4

4 回答 4

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/

它说明了微软在 IronPython 上投入了多少资金,但对兼容的 DBAPI 驱动程序投入了零。

于 2010-06-09T15:39:06.237 回答
0

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

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

于 2010-06-10T17:54:53.643 回答
0

adodbapi 似乎是要走的路,但这是 adodbapi.py 的一个片段,它在 dialects 文件夹下随 SQL Alchemy 一起提供

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

"""
于 2010-06-14T19:12:38.703 回答
0

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

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

免责声明:我是 pypyodbc 的维护者。

于 2013-03-08T13:15:27.670 回答