A ligar ao servidor SQL da Microsoft com o Python

estou a tentar ligar-me ao SQL através do python para executar algumas consultas em algumas bases de dados SQL no servidor SQL da Microsoft. A partir da minha pesquisa online e neste fórum, a biblioteca mais promissora parece ser o pyodbc. Então eu fiz o seguinte código

import pyodbc
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; 
database=+MSQLDatabase+; trusted_connection=true")
cursor = conn.cursor()

e obter o seguinte erro

Traceback (most recent call last):
  File "C:\Users...\scrap.py", line 3, in <module>
    conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; database=+MSQLDatabase+; trusted_connection=true")
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

eu já olhei para as mensagens folowing e tentei mudar o meu driver para {SQL server} e conectei-me usando ligações ODBC antes em SAS, que é parcialmente o que o meu código acima é baseado em, por isso, acho que não preciso de instalar mais nada.

Pyodbc.Erro: ('IM002', ' [IM002] [unixODBC] [Driver Manager]nome da fonte de dados não encontrado, e nenhum controlador por omissão especificado (0) (SQLDriverConnect)')

o nome da fonte de dados Pyodbc - "não foi encontrado e não foi indicado nenhum controlador por omissão"

Obrigado.
Author: Community, 2015-11-16

7 answers

É assim que eu faço...
import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=server_name;"
                      "Database=db_name;"
                      "Trusted_Connection=yes;")


cursor = cnxn.cursor()
cursor.execute('SELECT * FROM Table')

for row in cursor:
    print('row = %r' % (row,))

Fontes relevantes:

 69
Author: ryguy7272, 2017-06-15 16:54:20

Uma pequena adição ao que já foi dito antes. Provavelmente quer devolver um dataframe. Isto seria feito como

import pypyodbc 
import pandas as pd

cnxn = pypyodbc.connect("Driver={SQL Server Native Client 11.0};"
                        "Server=server_name;"
                        "Database=db_name;"
                        "uid=User;pwd=password")
df = pd.read_sql_query('select * from table', cnxn)
 24
Author: Keith, 2017-03-09 00:13:15

Nas ligações de fonte de dados entre um cliente e um servidor existem dois tipos gerais: o ODBC que usa um DRIVER e o OLEDB que usa um fornecedor. E no mundo da programação, é um debate regularsobre o caminho a seguir na ligação às fontes de dados.

Está a usar um fornecedor, SQLOLEDB, mas a especificá-lo como condutor. Tanto quanto sei, nem os módulos pyodbc nem pypyodbc suportam as ligações do Window OLEDB. No entanto, o adodbapi usa o Microsoft ADO como um componente subjacente.

Abaixo estão ambas as abordagens para os parâmetros de ligação. Além disso, i o formato de texto as suas variáveis, dado que a sua concatenação não quebrou adequadamente as aspas dentro do texto. Você vai notar que eu dobro os suspensórios encaracolados, uma vez que é necessário em fio de conexão e {[[2]} também o usa.

# PROVIDER
import adodbapi
conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
       trusted_connection=yes;UID={2};PWD={3};".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()

# DRIVER
import pyodbc
conn = pyodbc.connect("DRIVER={{SQL Server}};SERVER={0}; database={1}; \
       trusted_connection=yes;UID={2};PWD={3}".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()
 19
Author: Parfait, 2017-05-23 12:18:13
Prefiro assim ... era muito mais fácil.

Http://www.pymssql.org/en/stable/pymssql_examples.html

conn = pymssql.connect("192.168.10.198", "odoo", "secret", "EFACTURA")
cursor = conn.cursor()
cursor.execute('SELECT * FROM usuario')
 6
Author: Franco, 2017-12-08 00:50:48

Uma abordagem alternativa seria Instalar o Microsoft ODBC Driver 13, depois substituir SQLOLEDB por ODBC Driver 13 for SQL Server

Cumprimentos.

 1
Author: mondieki, 2017-03-07 17:13:25

Tente usar o pytds, ele funciona em um ambiente mais complexo do que pyodbc e mais fácil de configurar.

Fiz com que funcionasse no Ubuntu 18.04

Ref: https://github.com/denisenkom/pytds

Exemplo de código na documentação:

import pytds
with pytds.connect('server', 'database', 'user', 'password') as conn:
    with conn.cursor() as cur:
        cur.execute("select 1")
        cur.fetchall()
 0
Author: Alfred Huang, 2018-06-20 01:04:29
Aqui estão algumas fotos para novatos.

enter image description here

 0
Author: Andrew, 2018-08-29 23:26:27