Resumo
Estou usando um Mac no Yosemite versão 10.10.1 tentando me conectar a um banco de dados MS SQL Server. Pesquisei e não consegui encontrar uma resposta detalhada atualizada, então aqui está um artigo que é principalmente deste artigo incrível aqui . Estou adicionando no stackoverflow caso o link morra. A ideia é que tenhamos as seguintes camadas para configurar/conectar.
Camadas
- PARTE 1 - pyodbc
- PARTE 2 - freeTDS (pode verificar com tsql)
- PARTE 3 - unixODBC (pode verificar com o isql)
- PARTE 4 - MS SQL (pode verificar com um programa python normal)
Etapas
-
Instale o Homebrew de aqui - este é um gerenciador de pacotes para Mac OSX. O artigo mostra como usar outro gerenciador de pacotes 'MacPorts'. Para minhas instruções, eles estão com homebrew. Basicamente homebrew tem uma pasta 'cellar' que contém diferentes versões de pacotes. Em vez de modificar seus arquivos normais, ele aponta para esses pacotes homebrew.
-
Precisamos instalar o Pyodbc, mas o pyodbc usa drivers iODBC por padrão (que vem instalado com o mac), mas muitas pessoas têm problemas para fazê-lo funcionar. Então, vamos usar uma alternativa chamadaunixodbc
, que instalaríamos no futuro. Por enquanto, precisamos configurar a instalação do pyodbc para que funcione com unixodbc.
Vá para PyPi e baixe o tarball pyodbc e descompacte-o. Em seguida, altere essas linhas em
setup.py
:elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('iodbc')
para:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('odbc')
e agora execute
python setup.py install
. Isso faz com que nossa instalação do pyodbc use drivers unixodbc por padrão. Perfeito!
-
Instalar o FreeTDS combrew install freetds --with-unixodbc
(FreeTDS é o driver que fica entre o Mac ODBC e o MS SQL Server, this O gráfico aqui mostra qual versão do TDS você deve usar com base em sua versão específica do Microsoft Server; por exemplo. protocolo tds 7.2 para Microsoft SQL Server 2008).
-
Configurarfreetds.conf
file (O arquivo deve estar em '/usr/local/etc/freetds.conf', que para Homebrew é um link para dizer '/usr/local/Cellar/freetds/0.91_2/etc', mas o seu pode estar em algum lugar diferente dependendo da versão). Editei o global e adicionei minhas informações de banco de dados ao final (por algum motivo, 'tds version =7.2' geraria um erro, mas ainda funciona, enquanto 8.0 funciona):
[global] # TDS protocol version tds version = 8.0 [MYSERVER] host = MYSERVER port = 1433 tds version = 8.0
-
Verifique se o FreeTDS está instalado corretamente com:tsql -S myserver -U myuser -P mypassword
(você deve ver um prompt como este se funcionou)
locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1>
-
Instale o unixODBC combrew install unixodbc
.
-
Configure seus arquivos de configuração unixODBC , que inclui odbcinst.ini (configuração do driver) e odbc.ini (arquivo de configuração DSN). Por padrão, meus arquivos estavam em:/Library/ODBC
(Nota:NÃO é minha biblioteca de usuários, também conhecida como /Users/williamliu/Library). Ou eles também podem estar no diretório de instalação do homebrew/usr/local/Cellar/unixodbc/<version>/etc
.
-
Abra seu 'odbcinst.ini ' e adicione o seguinte (Nota:Diferente se você usar MacPorts. Para Homebrew, este arquivo é um link para a versão homebrew, por exemplo, o meu está em '/usr/local/Cellar/freetds/0.91_2/lib/libtdsodbc.so '):
[FreeTDS] Description=FreeTDS Driver for Linux & MSSQL on Win32 Driver=/usr/local/lib/libtdsodbc.so Setup=/usr/local/lib/libtdsodbc.so UsageCount=1
-
Abra seu 'odbc.ini ' e, em seguida, adicione o seguinte (geralmente junto comodbcinst.ini
:
[MYSERVER] Description = Test to SQLServer Driver = FreeTDS Trace = Yes TraceFile = /tmp/sql.log Database = MYDATABASE Servername = MYSERVER UserName = MYUSER Password = MYPASSWORD Port = 1433 Protocol = 8.0 ReadOnly = No RowVersioning = No ShowSystemTables = No ShowOidColumn = No FakeOidIndex = No
-
Verificar unixODBC instalado corretamente com:isql MYSERVER MYUSER MYPASSWORD
. Se você receber um erro que não pode se conectar, adicione-v
para verificar qual é a saída detalhada e corrigi-la. Caso contrário, você deve ver isso:
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
-
Agora verifique se o pyodbc funciona com um programa python. Execute python no shell ou em um arquivo .py com isso e você deve obter sua consulta de volta:
import pyodbc import pandas import pandas.io.sql as psql cnxn = pyodbc.connect('DSN=MYSERVER;UID=MYUSER;PWD=MYPASSWORD') cursor = cnxn.cursor() sql = ("SELECT * FROM dbo.MYDATABASE") df = psql.frame_query(sql, cnxn)
Você pode consultar a documentação de pyodbc para obter mais ajuda depois disso.