Pergunta

Eu tenho o MSSQL 2005 em execução no meu computador pessoal com um banco de dados em que gostaria de executar alguns scripts do Python. Estou procurando uma maneira de fazer um acesso realmente simples nos dados. Gostaria de executar algumas instruções selecionadas, processar os dados e talvez fazer com que o Python salve um arquivo de texto com os resultados.

Infelizmente, embora eu saiba um pouco sobre Python e um pouco sobre bancos de dados, é muito difícil para mim dizer, apenas da leitura, se uma biblioteca fizer o que eu quiser. Idealmente, eu gostaria de algo que funcione para outras versões do MSSQL, é gratuito e licenciado para permitir o uso comercial, é simples de usar e, possivelmente, trabalha com o IronPython.

Foi útil?

Solução

eu uso Alquimia SQL Com Cpython (embora não sei se funcionará com o IronPython). Será muito familiar para você se você usou o Hibernate/Nibernate. Se isso for um pouco detalhado para você, você pode usar Elixir, que é uma camada fina em cima da alquimia SQL. Para usar qualquer um deles, você precisará pyodbc, mas essa é uma instalação bastante simples.

Obviamente, se você deseja escrever SQL direto e não usar um ORM, só precisa de PYODBC.

Outras dicas

Todo mundo parece ter o lado do CPYTHON -> SQL Server coberto. Se você deseja usar o IRONPYTHON, pode usar a API ADO.NET padrão para conversar com o banco de dados:

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()

Se você já tem o IRONPYTHON, não precisa instalar mais nada.

Muitos documentos disponíveis aqui e aqui.

Pyodbc vem com o Activestate Python, que pode ser baixado de aqui. Um script ODBC mínimo para se conectar a um banco de dados SQL Server 2005 se parece com o seguinte:

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]

Eu também uso com sucesso pymssql com cpython. (Com e sem sqlalchemy).

http://adodbapi.sourceforge.net/ Pode ser usado com Cpython ou Ironpython. Fiquei muito satisfeito com isso.

Pypyodbc (http://code.google.com/p/pypyodbc) trabalha com Pypy, Ironpython e Cpython.

Este artigo Mostra uma amostra do Hello World de acesso ao MSSQL em Python.

O Pypyodbc tem quase o mesmo uso que o PYODBC, como pode ser visto como uma reimplementação do Moudle Pyodbc. Por ser escrito em python puro, também pode ser executado no IronPython e Pypy.

Na verdade, ao mudar para o PypyodBC em seu script existente, você pode fazer isso:

#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

...

Eu usei pymssql com Python padrão e gostei. Provavelmente mais fácil do que as alternativas mencionadas se você for apenas Procurando acesso básico ao banco de dados.

Amostra código.

Se você deseja o caminho rápido e sujo com o CPYTHON (também funciona para 3.x Python):

Instale o pywin32 depois de instalar o python http://sourceforge.net/projects/pywin32/files/pywin32/

Importar a seguinte biblioteca: importar ODBC

Criei o seguinte método para obter o driver ODBC do SQL Server (ele é um pouco diferente na nomeação, dependendo da sua versão do Windows, então isso o receberá independentemente):

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: Se você usar a função acima, precisará importar essas duas bibliotecas: WinReg e Re

Em seguida, você usa as informações da API 1 do ODBC, conforme definido aqui: http://www.python.org/dev/peps/pep-0248/

Sua string de interface de conexão deve se parecer algo assim (supondo que você esteja usando meu método acima para obter o nome do driver ODBC e é uma conexão confiável):

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

Este método tem muitos lados baixos. É desajeitado por causa de apenas apoiar o ODBC API 1, e há alguns insetos menores na API ou no driver ODBC que eu encontrei, mas isso realiza o trabalho em todas as versões do CPYTHON no Windows.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top