2010-06-08 34 views
1

J'utilise IronPython et le module clr pour récupérer des informations SQL Server via SMO. Je souhaite récupérer/stocker ces données dans une base de données SQL Server à l'aide de SQL Alchemy, mais j'ai des problèmes pour charger le module pyodbc.Utilisation de SQL Alchemy et pyodbc avec IronPython 2.6.1

est ici la configuration:

  • IronPython 2.6.1 (installé à D: \ Program Files \ IronPython)
  • CPython 2.6.5 (installé à D: \ Python26)
  • SQL Alchemy 0.6 .1 (installés à D: \ Python26 \ Lib \ site-packages \ sqlalchemy)
  • pyodbc 2.1.7 (installé à D: \ Python26 \ Lib \ site-packages)

Je ces e ntries dans le site.py IronPython à l'importation CPython et bibliothèques tierces:

# 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 importe OK dans IronPython, mis je reçois ce message d'erreur lorsque vous essayez de vous connecter à 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 

Ce code fonctionne très bien dans CPython, mais il semble que le module pyodbc n'est pas accessible depuis IronPython.

Des suggestions? Je me rends compte que ce n'est peut-être pas la meilleure façon d'aborder le problème, alors je suis ouvert à aborder cette question différemment. Je voulais juste apprendre à utiliser SQL Alchemy et pyodbc.

Répondre

2

très probablement que pyodbc n'est pas compatible avec IronPython, car il a été conçu pour être utilisé avec cPython. IronPython a certainement une sorte d'ODBC (en fait, ADO.net semble être l'endroit où sa compatibilité a été intégrée), mais un DBAPI serait le moyen le plus direct de faire fonctionner SQLAlchemy.

Voici donc quelques exemples non-DBAPI MS spécifique: http://www.ironpython.info/index.php/Accessing_SQL_Server quelqu'un parler de DBAPI en 2006: http://hex-dump.blogspot.com/2006/10/ironpython-and-adonet-part-2.html quelque chose d'un peu plus récente: http://bitbucket.org/jdhardy/adonet-dbapi/

Il dit quelque chose que MS verse cependant beaucoup d'argent dans IronPython mais zéro dans un pilote DBAPI conforme.

0

Vous pouvez utiliser le support adodbapi de SQLAlchemy à la place; La dernière version d'adodbapi (2.3.0) supporte IronPython.

Vous devez seulement vous assurer que le paquet adodbapi est sur sys.path, puis utiliser 'mssql + adodbapi: //' au lieu de 'mssql: //' dans votre chaîne de connexion.

0

adodbapi semble que le chemin à parcourir, mais voici un extrait de adodbapi.py livré avec SQL Alchemy sous les dialectes dossier

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

""" 
1

SQLAlchemy ne peut fonctionner directement sous IronPython, car pyodbc est actuellement pas compatible avec IronPython. Toutefois, vous pouvez utiliser pypyodbc sous IronPython en tant que dbi-2.0 bibliothèque de plaintes, qui est similaire à pyodbc, et permet d'exécuter sqlalchemy sous Ironpython, this How-to décrit les 4 étapes pour l'activer. Clause de non-responsabilité: Je suis le principal responsable de pypyodbc.

+1

Merci d'avoir posté votre réponse! Veuillez vous assurer de lire attentivement la [FAQ sur l'autopromotion] (http://stackoverflow.com/faq#promotion). Notez également qu'il est * obligatoire * que vous publiez une clause de non-responsabilité chaque fois que vous créez un lien vers votre propre site/produit. –

+0

https://code.google.com/p/pypyodbc/wiki/Enable_SQLAlchemy_on_IronPython – cmotley