Использование SQL Alchemy и pyodbc с IronPython 2.6.1

Я использую 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)

У меня есть эти записи в 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, я получаю это сообщение об ошибке при попытке подключиться к 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.


person beargle    schedule 08.06.2010    source источник


Ответы (4)


весьма вероятно, что 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.

person zzzeek    schedule 09.06.2010

Вместо этого вы можете попробовать использовать поддержку SQLAlchemy adodbapi; последняя версия adodbapi (2.3.0) поддерживает IronPython.

Вам нужно только убедиться, что пакет adodbapi находится в sys.path, а затем использовать mssql + adodbapi: // вместо mssql: // в строке подключения.

person Jeff Hardy    schedule 10.06.2010

adodbapi кажется подходящим вариантом, но вот фрагмент из adodbapi.py, который поставляется с SQL Alchemy в папке диалектов

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

"""
person Bryan    schedule 14.06.2010

SQLAlchemy не может работать напрямую под IronPython, потому что pyodbc в настоящее время несовместим с IronPython.

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

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

person pypyodbc    schedule 08.03.2013
comment
Спасибо, что разместили свой ответ! Не забудьте внимательно прочитать FAQ по саморекламе. Также обратите внимание, что требуется, чтобы вы публиковали отказ от ответственности каждый раз, когда вы ссылаетесь на свой собственный сайт / продукт. - person Andrew Barber; 08.03.2013