2008-11-14 11 views
23

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 a los datos. Me gustaría ejecutar algunas declaraciones seleccionadas, procesar los datos y quizás Python pueda guardar un archivo de texto con los resultados.¿Cuál es la forma más sencilla de acceder a mssql con python o ironpython?

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

Respuesta

18

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

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

+1

Pyodb funciona para la mayoría de las tareas –

4

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

+1

para que conste, yo creo que el apoyo pymssql en SQLAlchemy está en desuso. El controlador recomendado es pyodbc (eso no quiere decir que pymssql no funcione de forma independiente). –

+0

Oh, gracias por esto. –

1

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

Muestra code.

+0

El enlace del código de muestra está roto. Por favor, corrige o elimina. – DavidJ

+0

¡Hecho! Enlaces actualizados –

12

pyodbc viene con Activestate Python, que se puede descargar desde here. Una secuencia de comandos ODBC mínimo para conectarse a una base de datos de SQL Server 2005 es el siguiente:

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] 
+0

Soy un fanático de Pyodbc. Es extremadamente simple y fácil de usar con el servidor sql y muchas otras fuentes de datos también. – TimothyAWiseman

25

Todo el mundo parece tener el CPython -> lado de SQL Server cubierto. Si desea utilizar IronPython, puede utilizar la API de ADO.NET estándar para hablar 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 tienes IronPython, no es necesario instalar nada más.

Muchos de los documentos disponibles here y here.

+0

Ese ejemplo parece un poco hinchado. – graffic

+2

Desafortunadamente, ADO.NET es un poco más detallado que el correspondiente código DBAPI de Python (y esto es cierto para la biblioteca de clases .NET en general). Pero no está tan mal, y es bastante fácil incluir un módulo DBAPI. Lo hice por trabajar con SQLAlchemy. – babbageclunk

+0

Muy buen punto, pero no olvide que SMO es otra opción. – TimothyAWiseman

0

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

Instalar pywin32 después de instalar Python http://sourceforge.net/projects/pywin32/files/pywin32/

Importe la biblioteca siguiente: importación ODBC

I creado el siguiente método para conseguir el controlador ODBC SQL Server (que es ligeramente diferente en el nombramiento dependiendo de su versión de Windows, por lo que este 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 utiliza la función anterior, tendrá que importar también estas dos bibliotecas: winre gy re

a continuación, utiliza el ODBC información de la API 1 como se define aquí: http://www.python.org/dev/peps/pep-0248/

Su cadena de interfaz de conexión debe ser algo como esto (suponiendo que está utilizando mi método anterior para obtener el nombre del controlador ODBC, y se es una conexión de confianza):

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

Este método tiene muchas desventajas. Es torpe porque solo soporta ODBC API 1, y hay un par de errores menores en la API o en el controlador ODBC con los que me he topado, pero hace el trabajo en todas las versiones de CPython en Windows.

2

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

This article muestra una muestra de Hello World de acceso a mssql en Python.

PyPyODBC tiene casi el mismo uso que pyodbc, ya que se puede ver como una reintroducción del módem pyodbc. Debido a que está escrito en Python puro, también se puede ejecutar en IronPython y PyPy.

En realidad, cuando el interruptor de pypyodbc en el script existente, se 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 

... 
Cuestiones relacionadas