Pregunta

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 realmente simple a los datos. Me gustaría ejecutar algunas declaraciones de selección, 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í saber, 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 con licencia para permitir el uso comercial, sea fácil de usar y posiblemente funcione con ironpython.

¿Fue útil?

Solución

Uso SQL Alchemy con cPython (aunque no sé si funcionará con IronPython) . Le resultará bastante familiar si ha utilizado Hibernate / nHibernate. Si eso es demasiado detallado para usted, puede usar Elixir , que es una capa delgada en la parte superior de la alquimia SQL. Para usar cualquiera de esos, necesitará pyodbc , pero es una instalación bastante simple.

Por supuesto, si desea escribir SQL directo y no usar un ORM, solo necesita pyodbc.

Otros consejos

Todos los demás parecen tener el cPython - > SQL Server lado cubierto. 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=<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 ya tiene IronPython, no necesita instalar nada más.

Muchos documentos disponibles aquí y aquí .

pyodbc viene con Activestate Python, que se puede descargar de aquí . Un script odbc mínimo para conectarse a una base de datos de SQL Server 2005 se ve así:

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/ se puede usar con CPython o IronPython. Estoy muy satisfecho con eso.

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

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

PyPyODBC tiene casi el mismo uso que pyodbc, ya que se puede ver como una reimplementación del moudle 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 más fácil que las alternativas mencionadas si está solo buscando acceso básico a la base de datos.

Ejemplo de código .

Si quiere la manera 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 /

Importa la siguiente biblioteca: importar odbc

Creé el siguiente método para obtener el controlador odbc de SQL Server (es un poco diferente en la asignación de nombres dependiendo de su versión de Windows, por lo que esto lo obtendrá independientemente):

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 deberá importar estas dos bibliotecas: winreg y re

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

La cadena de la interfaz de conexión debería verse así (suponiendo que esté utilizando 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 inconvenientes. Es torpe porque solo admite ODBC API 1, y hay un par de errores menores en la API o el controlador ODBC con los que me he encontrado, pero hace el trabajo en todas las versiones de CPython en Windows.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top