Ringkasan
Saya menggunakan Mac di Yosemite Versi 10.10.1 mencoba menyambung ke database MS SQL Server. Saya mencari dan tidak dapat menemukan jawaban terperinci yang diperbarui, jadi inilah artikel yang sebagian besar berasal dari artikel luar biasa ini di sini . Saya menambahkannya di stackoverflow jika tautannya mati. Idenya adalah bahwa kita akan memiliki lapisan berikut untuk disiapkan/dihubungkan.
Lapisan
- BAGIAN 1 - pyodbc
- BAGIAN 2 - freeTDS (bisa dicek dengan tsql)
- BAGIAN 3 - unixODBC (bisa dicek dengan isql)
- BAGIAN 4 - MS SQL (dapat memeriksa dengan program python biasa)
Langkah
-
Instal Homebrew dari di sini - ini adalah manajer paket untuk Mac OSX. Artikel ini menunjukkan cara menggunakan manajer paket lain 'MacPorts'. Untuk instruksi saya, mereka dengan homebrew. Pada dasarnya homebrew memiliki folder 'gudang' yang menyimpan berbagai versi paket. Alih-alih memodifikasi file normal Anda, itu malah menunjuk ke paket homebrew ini.
-
Kita perlu menginstal Pyodbc, tetapi pyodbc menggunakan driver iODBC secara default (yang disertakan dengan mac), tetapi banyak orang memiliki masalah untuk membuatnya bekerja. Jadi, kita akan menggunakan alternatif yang disebut
unixodbc
, yang akan kami pasang di masa mendatang. Untuk saat ini, kita perlu mengonfigurasi instalasi pyodbc agar berfungsi dengan unixodbc.
Buka PyPi dan unduh tarball pyodbc dan buka kompresnya. Kemudian ubah baris ini di setup.py
:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('iodbc')
ke:
elif sys.platform == 'darwin':
# OS/X now ships with iODBC.
settings['libraries'].append('odbc')
dan sekarang jalankan python setup.py install
.
Ini membuat instalasi pyodbc kami menggunakan driver unixodbc secara default. Sempurna!
-
Instal FreeTDS dengan
brew install freetds --with-unixodbc
(FreeTDS adalah driver yang berada di antara Mac ODBC dan MS SQL Server, ini bagan di sini menunjukkan versi TDS mana yang harus Anda gunakan berdasarkan versi Microsoft Server spesifik Anda; misalnya tds protokol 7.2 untuk Microsoft SQL Server 2008). -
Konfigurasikan
freetds.conf
file (File harus dalam '/usr/local/etc/freetds.conf', yang untuk Homebrew adalah tautan untuk mengatakan '/usr/local/Cellar/freetds/0.91_2/etc', tetapi milik Anda mungkin berbeda tergantung versi). Saya mengedit global dan menambahkan info basis data saya sampai akhir (untuk beberapa alasan 'tds version =7.2' akan menimbulkan kesalahan, tetapi masih berfungsi, sementara 8.0 hanya berfungsi):[global] # TDS protocol version tds version = 8.0 [MYSERVER] host = MYSERVER port = 1433 tds version = 8.0
-
Verifikasi FreeTDS terpasang benar dengan:
tsql -S myserver -U myuser -P mypassword
(Anda akan melihat prompt seperti ini jika berhasil)locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1>
-
Instal unixODBC dengan
brew install unixodbc
. -
Siapkan file konfigurasi unixODBC . Anda , yang mencakup odbcinst.ini (konfigurasi driver), dan odbc.ini (file konfigurasi DSN). Secara default, file saya berada di:
/Library/ODBC
(Catatan:BUKAN perpustakaan pengguna saya alias /Users/williamliu/Library). Atau bisa juga di direktori instalasi homebrew Anda/usr/local/Cellar/unixodbc/<version>/etc
. -
Buka 'odbcinst.ini . Anda ' dan kemudian tambahkan yang berikut (Catatan:Berbeda jika Anda menggunakan MacPorts. Untuk Homebrew, file ini adalah tautan ke versi homebrew mis. milik saya ada di '/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
-
Buka 'odbc.ini . Anda ' dan kemudian tambahkan yang berikut (ini biasanya bersama dengan
odbcinst.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
-
Verifikasi unixODBC diinstal dengan benar dengan:
isql MYSERVER MYUSER MYPASSWORD
. Jika Anda mendapatkan kesalahan bahwa Anda tidak dapat terhubung, tambahkan-v
untuk memeriksa apa keluaran verbose dan memperbaikinya. Jika tidak, Anda akan melihat ini:+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
-
Sekarang verifikasi pyodbc berfungsi dengan program python. Jalankan python di shell atau file .py dengan ini dan Anda akan mendapatkan kembali kueri Anda:
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)
Anda dapat merujuk ke dokumentasi dari pyodbc untuk mendapatkan bantuan lebih lanjut setelah ini.