¿Cuál es la forma más sencilla de acceder a mssql con python o ironpython?

Tengo mssql 2005 ejecutándose en mi computadora personal con una base de datos en la que me gustaría ejecutar algunos scripts de Python. Estoy buscando una manera de hacer un acceso muy simple en los datos. Me gustaría ejecutar algunas declaraciones selectas, procesar los datos y quizás hacer que Python guarde un archivo de texto con los resultados.

Desafortunadamente, aunque sé un poco sobre python y un poco sobre bases de datos, es muy difícil para mí decir, solo por leer, si una biblioteca hace lo que quiero. Idealmente, me gustaría algo que funcione para otras versiones de mssql, que sea gratuito y tenga licencia para permitir el uso comercial, sea fácil de usar y posiblemente funcione con ironpython.

Uso SQL Alchemy con cPython (aunque no sé si funcionará con IronPython). Le resultará bastante familiar si ha usado Hibernate / nHibernate. Si eso es un poco demasiado detallado para usted, puede usar Elixir , que es una capa delgada sobre SQL Alchemy. Para usar cualquiera de estos, necesitarás pyodbc , pero esa es una instalación bastante simple.

Por supuesto, si desea escribir SQL directamente y no utilizar un ORM, solo necesita pyodbc.

Todos los demás parecen tener cubierto el lado cPython -> SQL Server. Si desea usar IronPython, puede usar la API estándar de ADO.NET para comunicarse con la base de datos:

import clr clr.AddReference('System.Data') from System.Data.SqlClient import SqlConnection, SqlParameter conn_string = 'data source=; initial catalog=; 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 ya tienes IronPython, no necesitas instalar nada más.

Un montón de documentos disponibles aquí y aquí .

pyodbc viene con Activestate Python, que puede descargarse desde aquí . Una secuencia de comandos de odbc mínima para conectarse a una base de datos de SQL Server 2005 tiene este aspecto:

 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] 

También uso con éxito pymssql con CPython. (Con y sin SQLAlchemy).

http://adodbapi.sourceforge.net/ puede usarse con CPython o IronPython. Estoy muy contento con eso.

PyPyODBC ( http://code.google.com/p/pypyodbc ) funciona bajo PyPy, Ironpython y CPython.

Este artículo muestra una muestra de Hello World de acceso a mssql en Python.

PyPyODBC tiene casi el mismo uso que pyodbc, ya que puede verse como una reimplementación de la pala de pyodbc. Debido a que está escrito en Python puro, también puede ejecutarse en IronPython y PyPy.

En realidad, cuando cambie a pypyodbc en su script existente, puede hacer esto:

 #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 ... 

He usado pymssql con python estándar y me ha gustado. Probablemente sea más fácil que las alternativas mencionadas si está buscando un acceso básico a la base de datos.

Código de muestra

Si quieres la forma rápida y sucia con CPython (también funciona para 3.X python):

Instale PYWIN32 después de instalar python http://sourceforge.net/projects/pywin32/files/pywin32/

Importar la siguiente biblioteca: importar odbc

Creé el siguiente método para obtener el controlador odbc de SQL Server (es un nombre ligeramente diferente dependiendo de su versión de Windows, así que esto lo obtendré de todas formas):

 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 

Nota: si usa la función anterior, también necesitará importar estas dos bibliotecas: winreg y re

Luego usa la información de la API 1 de odbc como se define aquí: http://www.python.org/dev/peps/pep-0248/

La cadena de la interfaz de conexión debe tener este aspecto (suponiendo que esté usando mi método anterior para obtener el nombre del controlador ODBC, y es una conexión confiable):

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

Este método tiene muchos aspectos negativos. Es torpe porque solo soporta la API 1 de ODBC, y hay un par de errores menores en la API o en el controlador ODBC que he encontrado, pero hace el trabajo en todas las versiones de CPython en Windows.