【问题标题】:Using SQL Alchemy and pyodbc with IronPython 2.6.1在 IronPython 2.6.1 中使用 SQL Alchemy 和 pyodbc
【发布时间】:2011-03-01 05:24:14
【问题描述】:

我正在使用 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 的经验。

【问题讨论】:

    标签: sqlalchemy ironpython smo cpython pyodbc


    【解决方案1】:

    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 驱动程序投入了零。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        adodbapi 似乎是要走的路,但这里有一个来自 adodbapi.py 的 sn-p,它在 dialects 文件夹下随 SQL Alchemy 提供

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

          • 感谢您发布您的答案!请务必仔细阅读FAQ on Self-Promotion。另请注意,每次链接到自己的网站/产品时,都要求发布免责声明。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-30
          • 2012-04-21
          • 1970-01-01
          相关资源
          最近更新 更多