Sqlalchemy 在IronPython 2.6.1中使用SQL Alchemy和pyodbc

Sqlalchemy 在IronPython 2.6.1中使用SQL Alchemy和pyodbc,sqlalchemy,ironpython,smo,cpython,pyodbc,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) py

我使用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软件包上)
我在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 imports OK在IronPython中,在尝试连接到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
.NET2.0.50727.3607上的IronPython 2.6.1(2.6.10920.0) 有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。 >>>进口炼金术 >>>e=sqlalchemy.MetaData(“mssql://”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“D:\Python26\Lib\site packages\sqlalchemy\schema.py”,第1780行,在\uuu init中__ 文件“D:\Python26\Lib\site packages\sqlalchemy\schema.py”,第1828行,在绑定到 文件“D:\Python26\Lib\site packages\sqlalchemy\engine\\uuuuu init\uuuuu.py”,第241行,在create\u引擎中 文件“D:\Python26\Lib\site packages\sqlalchemy\engine\strategies.py”,第60行,在create中 文件“D:\Python26\Lib\site packages\sqlalchemy\connectors\pyodbc.py”,第29行,dbapi格式 ImportError:没有名为pyodbc的模块 这段代码在CPython中运行得很好,但pyodbc模块似乎无法从IronPython访问


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

pyodbc很可能与IronPython不兼容,因为它是为与cPython一起使用而设计的

IronPython当然内置了某种ODBC(实际上,ADO.net似乎就是它的at)兼容性,但DBAPI将是让SQLAlchemy使用它的最直接的方法

下面是一些MS特定的非DBAPI示例: 有人在2006年谈论DBAPI: 更近一点的东西:


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

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


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

adodbapi似乎是可行的方法,但下面是adodbapi.py中的一个片段,它随SQL Alchemy一起发布在方言文件夹下

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

"""

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

但是,您可以在IronPython下使用dbi-2.0投诉库,它类似于pyodbc,并在IronPython下启用运行sqlalchemy,描述了启用它的4个步骤


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

感谢您发布答案!请务必仔细阅读本手册。还请注意,每次链接到自己的网站/产品时,都需要发布免责声明。