Question

J'ai mssql 2005 exécuté sur mon ordinateur personnel avec une base de données sur laquelle je voudrais exécuter des scripts python. Je cherche un moyen de faire un accès très simple aux données. J'aimerais exécuter certaines instructions, traiter les données et éventuellement faire enregistrer par Python un fichier texte contenant les résultats.

Malheureusement, même si je connais un peu le python et les bases de données, il m'est très difficile de le savoir, rien qu'en la lisant, si une bibliothèque fait ce que je veux. Idéalement, j'aimerais quelque chose qui fonctionne pour les autres versions de mssql, qui soit gratuit et sous licence pour permettre une utilisation commerciale, qui soit simple à utiliser et qui fonctionne éventuellement avec ironpython.

Était-ce utile?

La solution

J'utilise SQL Alchemy avec cPython (je ne sais pas si cela fonctionnera avec IronPython) . Vous serez assez familier si vous avez utilisé Hibernate / nHibernate. Si cela est un peu trop détaillé pour vous, vous pouvez utiliser Elixir , qui est une mince couche au-dessus de l'alchimie SQL. Pour utiliser l’un ou l’autre de ces logiciels, vous aurez besoin de pyodbc , mais il s’agit d’une installation assez simple.

Bien sûr, si vous voulez écrire directement en SQL sans utiliser d'ORM, vous avez simplement besoin de pyodbc.

Autres conseils

Tout le monde semble avoir le cPython - > Côté SQL Server couvert. Si vous souhaitez utiliser IronPython, vous pouvez utiliser l'API ADO.NET standard pour communiquer avec la base de données:

import clr
clr.AddReference('System.Data')
from System.Data.SqlClient import SqlConnection, SqlParameter

conn_string = 'data source=<machine>; initial catalog=<database>; trusted_connection=True'
connection = SqlConnection(conn_string)
connection.Open()
command = connection.CreateCommand()
command.CommandText = 'select id, name from people where group_id = @group_id'
command.Parameters.Add(SqlParameter('group_id', 23))

reader = command.ExecuteReader()
while reader.Read():
    print reader['id'], reader['name']

connection.Close()

Si vous avez déjà IronPython, vous n'avez rien d'autre à installer.

Beaucoup de documents disponibles ici et ici .

pyodbc est fourni avec Activestate Python, qui peut être téléchargé à partir de ici . Un script odbc minimal pour se connecter à une base de données SQL Server 2005 se présente comme suit:

import odbc

CONNECTION_STRING="""
Driver={SQL Native Client};
Server=[Insert Server Name Here];
Database=[Insert DB Here];
Trusted_Connection=yes;
"""

db = odbc.odbc(CONNECTION_STRING)
c = db.cursor()
c.execute ('select foo from bar')
rs = c.fetchall()
for r in rs:
    print r[0]

J'utilise également avec succès pymssql avec CPython. (Avec et sans SQLAlchemy).

http://adodbapi.sourceforge.net/ peut être utilisé avec CPython ou IronPython. Je suis très heureux avec cela.

PyPyODBC ( http://code.google.com/p/pypyodbc ) fonctionne sous PyPy, Ironpython et CPython.

Cet article montre un exemple de Hello qui accède à mssql en python.

PyPyODBC a presque le même usage que pyodbc, car il peut être vu comme une ré-implémentation du pyodbc moudle. Comme il est écrit en Python pur, il peut également fonctionner avec IronPython et PyPy.

En fait, lorsque vous passez à pypyodbc dans votre script existant, vous pouvez le faire:

#import pyodbc               <-- Comment out the original pyodbc importing line

import pypyodbc as pyodbc    # Let pypyodbc "pretend" the pyodbc

pyodbc.connect(...)          # pypyodbc has 99% same APIs as pyodbc

...

J'ai utilisé pymssql avec du python standard et je l'ai aimé. Probablement plus facile que les alternatives mentionnées si vous recherchez simplement un accès de base à la base de données.

Exemple de code .

Si vous souhaitez utiliser CPython de manière rapide et simpliste (fonctionne également pour le python 3.X):

Installation de PYWIN32 après Python http://sourceforge.net/projects/pywin32/files / pywin32 /

Importez la bibliothèque suivante: importer odbc

J'ai créé la méthode suivante pour obtenir le pilote odbc de SQL Server (l'attribution de nom est légèrement différente en fonction de votre version de Windows, de sorte que vous l'obtiendrez quand même):

def getSQLServerDriver():
    key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\ODBC\ODBCINST.INI")
    sqlServerRegExp =  re.compile('sql.*server', re.I | re.S)

    try:
        for i in range(0, 2048):
            folder = winreg.EnumKey(key, i)
            if sqlServerRegExp.match(folder):
                return folder.strip()
    except WindowsError:
        pass

Remarque: si vous utilisez la fonction ci-dessus, vous devrez également importer ces deux bibliothèques: winreg et re

.

Vous utilisez ensuite les informations odbc API 1 telles que définies ici: http: // www .python.org / dev / peps / pep-0248 /

Votre chaîne d'interface de connexion devrait ressembler à ceci (en supposant que vous utilisiez la méthode ci-dessus pour obtenir le nom du pilote ODBC et qu'il s'agisse d'une connexion sécurisée):

dbString = "Driver={SQLDriver};Server=[SQL Server];Database=[Database Name];Trusted_Connection=yes;".replace('{SQLDriver}', '{' + getSQLServerDriver() + '}')

Cette méthode comporte de nombreux inconvénients. Il est maladroit car il ne supporte que ODBC API 1, et il existe quelques bugs mineurs dans l’API ou le pilote ODBC que j’ai rencontrés, mais le travail est exécuté dans toutes les versions de CPython dans Windows.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top