Conectar ao SQL Server a partir do Linux com ODBC

No mundo ideal de um administrador de banco de dados, tudo seria igual. Todos os servidores seriam idênticos e executariam as mesmas cargas de trabalho. Seriam mais fáceis de gerenciar. Mas, essa não é a realidade. Hoje em dia, os administradores de sistemas precisam gerenciar ambientes diferentes. Isso fica ainda mais evidente na necessidade de executar consultas SQL a partir de uma máquina Linux. Neste post, você aprenderá como se conectar ao SQL Server a partir do Linux!

Uma maneira de se conectar ao SQL Server a partir do Linux é usar um módulo Python. Mas antes de chegar tão longe, vamos primeiro cobrir em que ambiente estou trabalhando.

Neste artigo, estarei demonstrando essa tarefa usando o Ubuntu 16.04 e me conectarei ao SQL Server 2012 R2. No entanto, a mesma técnica deve ser aplicável a outras distribuições Linux e versões do SQL Server também. Administradores de bancos de dados, celebrem!

Pré-requisitos

Para começar, você precisará instalar alguns pré-requisitos. Primeiro, como você estará se conectando a uma instância do SQL Server a partir do Python, você precisará de um módulo Python. Um módulo Python comum para se conectar ao SQL é chamado de PyODBC. Este módulo permite que você consulte bancos de dados SQL via ODBC por meio de um driver ODBC do SQL Server para Linux. Para instalar a versão mais recente, use o pip (o gerenciador de pacotes Python).

> sudo pip install pyodbc

Se isso não funcionar, talvez você não tenha o pip instalado. Para instalá-lo:

> sudo easy_install pip

Em seguida, você precisa criar um script Python. Vou chamá-lo de sql_server.py. Para criar um script Python, primeiro crie um arquivo em branco.

> touch sql_server.py

Em seguida, usando seu editor de escolha, adicione as linhas abaixo. O shebang seguido pelo caminho para o binário do Python informa ao interpretador que este é um script Python. A instrução import permite chamar os métodos da biblioteca dentro do módulo pyodbc. Salve este script.

!/usr/bin/python
import pyodbc

Depois de ter o script Python criado, execute o script:

> python sql_server.py

Se isso funcionar sem erro, o módulo pyodbc foi instalado com sucesso.

Em seguida, adicione o código para executar uma consulta de teste. Para fazer isso, crie uma string ODBC.

Para saber mais sobre como elaborar strings ODBC, aquié um bom recurso.

A string ODBC é exigente sobre o que está incluído. Demorou algum tempo para descobrir como fazer isso funcionar, mas aqui está como a minha se parece. Abaixo, estou passando a string ODBC como argumento para o método connect() que está incluído no módulo pyodbc.

conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=server.domain.local;PORT=1433;UID=DOMAIN\user;PWD=mypassword;DATABASE=mydatabasename;UseNTLMv2=yes;TDS_Version=8.0;Trusted_Domain=domain.local;')

A maior parte da string ODBC é evidente, mas um fato importante é a barra invertida dupla para o UID. Sempre certifique-se de escapar todas as barras invertidas na string ODBC. Além disso, algumas das opções que estou usando são opcionais.

Também, você pode usar o nome do host para SERVER como eu fiz acima ou pode usar o endereço IP do SQL Server.

Sinta-se à vontade para adicionar ou remover conforme achar adequado para combinar com seu SQL Server.

Em seguida, você precisa criar um objeto de cursor que permitirá passar uma declaração T-SQL para. Isso é feito com o método cursor().

cursor = conn.cursor()

Agora você tem um objeto com um método execute() que pode ser usado para passar qualquer declaração T-SQL que desejarmos, como mostrado abaixo. Isso cria uma variável rows contendo o conjunto de dados resultante.

cursor.execute("SELECT * FROM <tablename>")
rows = cursor.fetchall()

Agora você está no ponto onde precisará decidir o que fazer com o conjunto de dados. Você pode enviar os resultados para um arquivo CSV, colocar os resultados em outro banco de dados ou escrever o conteúdo no console.

Abaixo, estou imprimindo os resultados no console se o conjunto de dados estiver populado.

if rows:
    print(rows)
Printing SQL rows in Python

Você pode ver que se o conjunto de dados for impresso no console, a saída não será muito bonita. Neste ponto, cabe a você decidir como formatar ou analisar os dados do banco de dados. A parte difícil acabou!

Agora você terá um script que se parece com isso:

sql_server.py
!/usr/bin/python import pyodbc conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=server.domain.local;PORT=1433;UID=DOMAIN\user;PWD=mypassword;DATABASE=mydatabasename;UseNTLMv2=yes;TDS_Version=8.0;Trusted_Domain=domain.local;') cursor.execute("SELECT * FROM <tablename>") rows = cursor.fetchall() if rows: print(rows)

Resumo

Neste post do blog, você aprendeu como usar o módulo Python pyodbc no Linux para se conectar a uma fonte de dados do SQL Server. A parte mais difícil para mim foi descobrir a string ODBC, mas uma vez que você tenha isso coberto, tudo deve correr tranquilamente.

Depois de conectar do Linux, por que não ver se você pode aumentar o desempenho usando contadores de desempenho?

Source:
https://adamtheautomator.com/connect-to-sql-server-from-linux/