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 にインストール)
CPython 標準およびサードパーティ ライブラリをインポートするために、IronPython の site.py に次のエントリがあります。
# 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 の使用経験が欲しかっただけです。