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.
Obrigado.7 answers
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:
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)
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()
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')
Uma abordagem alternativa seria Instalar o Microsoft ODBC Driver 13, depois substituir SQLOLEDB
por ODBC Driver 13 for SQL Server
Cumprimentos.
Tente usar o pytds, ele funciona em um ambiente mais complexo do que pyodbc
e mais fácil de configurar.
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()