Вопрос

Я использую IronPython и модуль clr для получения информации SQL Server через SMO.Я хотел бы получить/сохранить эти данные в базе данных SQL Server с помощью SQL Alchemy, но у меня возникли проблемы с загрузкой модуля 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)

У меня есть эти записи в файле site.py IronPython для импорта стандартных и сторонних библиотек 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, но при попытке подключения к 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.

Это было полезно?

Решение

весьма вероятно, что pyodbc несовместим с IronPython, поскольку он был разработан для использования с cPython.

IronPython, безусловно, имеет встроенную совместимость с ODBC (на самом деле, похоже, что ADO.net находится там, где он есть), но DBAPI был бы наиболее прямым способом заставить SQLAlchemy работать с ним.

Итак, вот пример, специфичный для MS, не использующий DBAPI: http://www.ironpython.info/index.php/Accessing_SQL_Serverкто-то говорит о DBAPI в 2006 году: http://hex-dump.blogspot.com/2006/10/ironpython-and-adonet-part-2.htmlчто-то более свежее: http://bitbucket.org/jdhardy/adonet-dbapi/

Это говорит о том, что MS вкладывает сколько угодно денег в 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.

Однако вы можете использовать pypyodbc под IronPython в качестве библиотеки жалоб dbi-2.0, которая похожа на pyodbc и позволяет запускать sqlalchemy под Ironpython, это практическое руководство описывает 4 шага, чтобы включить его.

Отказ от ответственности:Я сопровождаю pypyodbc.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top