with - Conectando-se ao servidor Microsoft SQL usando Python




sql connection string python (6)

Eu estou tentando se conectar ao SQL através do python para executar algumas consultas em alguns bancos de dados SQL no Microsoft SQL Server. De minha pesquisa on-line e neste fórum a biblioteca mais promissora parece ser 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 receba 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 olhei para os posts seguintes e tentei mudar meu driver para {sql server} e conectei usando links ODBC antes no SAS, que é parcialmente o meu código acima, então não acho que eu precise instalar mais nada.

pyodbc.Error: ('IM002', '[IM002] [unixODBC] [Gerenciador de driver] Nome da fonte de dados não encontrado e nenhum driver padrão especificado (0) (SQLDriverConnect)')

Pyodbc - "Nome da fonte de dados não encontrado e nenhum driver padrão especificado"

obrigado


É 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:


Aqui estão algumas fotos para iniciantes.


Menor adição ao que foi dito antes. Você provavelmente deseja retornar um dataframe. Isso 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 conexões de fonte de dados entre um cliente e um servidor, há dois tipos gerais: ODBC que usa um DRIVER e um OLEDB que usa um PROVIDER. E no mundo da programação, é um debate regular sobre qual rota seguir para se conectar às fontes de dados.

Você está usando um provedor, SQLOLEDB , mas especificando-o como um driver. Até onde eu sei, nem os módulos pyodbc nem pypyodbc suportam conexões Window OLEDB. No entanto, o adodbapi usa o Microsoft ADO como um componente subjacente.

Abaixo estão as duas abordagens para seus parâmetros de conexão. Além disso, codifiquei o formato de suas variáveis ​​porque sua concatenação não quebrou corretamente aspas dentro da string. Você notará que eu dobro as chaves, já que elas são necessárias na string de conexão e string.format() também a 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()

Tente usar pytds, ele funciona em ambientes mais complexos que o pyodbc e é mais fácil de configurar.

Eu fiz isso funcionar 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()

Uma abordagem alternativa seria installing Microsoft ODBC Driver 13 e substituir o SQLOLEDB pelo ODBC Driver 13 for SQL Server

Saudações.







windows