2017-06-13 18 views
6

Khi tôi cố gắng kết nối với một cơ sở dữ liệu máy chủ sql với pyodbc (trên mac):Không thể mở lib 'Trình điều khiển ODBC 13 cho SQL Server'? Vấn đề liên kết Sym?

import pyodbc 

server = '####' 
database = '####' 
username = '####@####' 
password = '#####' 
driver='{ODBC Driver 13 for SQL Server}' 

pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+password) 

tôi nhận được lỗi sau:

Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 13 for SQL Server' : file not found (0) (SQLDriverConnect)")

Khi tôi con đường ở vị trí lái xe thực tế:

driver='/usr/local/lib/libmsodbcsql.13.dylib' 

Nó bắt đầu hoạt động!

odbcinst.ini My trông như sau:

[ODBC Driver 13 for SQL Server] 
Description=Microsoft ODBC Driver 13 for SQL Server 
Driver=/usr/local/lib/libmsodbcsql.13.dylib 
UsageCount=1 

Làm thế nào tôi có thể nhận được tài liệu tham khảo của tôi để driver='{ODBC Driver 13 for SQL Server}' để bắt đầu hoạt động trở lại?

Ban đầu tôi sử dụng this guide để cài đặt trình điều khiển. Và tôi đang sử dụng anaconda trên Mac Sierra nếu điều đó giúp?

+0

Hãy xem [câu trả lời này] (https://stackoverflow.com/a/28488604/2144390). Tệp odbcinst.ini của bạn có thể không ở vị trí mà unixODBC (và/hoặc anaconda) mong đợi. –

Trả lời

12

Chạy:

odbcinst -j 

mang lại:

unixODBC 2.3.4 
DRIVERS............: /etc/odbcinst.ini 
SYSTEM DATA SOURCES: /etc/odbc.ini 
FILE DATA SOURCES..: /etc/ODBCDataSources 
USER DATA SOURCES..: /Users/emehex/.odbc.ini 
SQLULEN Size.......: 8 
SQLLEN Size........: 8 
SQLSETPOSIROW Size.: 8 

Thay vì sao chép các tập tin vào thư mục /etc/ (không chắc chắn lý do tại sao unixODBC nghĩ rằng họ đã có) Tôi tạo ra một liên kết tượng trưng cho mỗi tập tin:

sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini 
sudo ln -s /usr/local/etc/odbc.ini /etc/odbci.ini 

Điều này giải quyết được vấn đề!

+0

Giải pháp tốt - để trả lời câu hỏi của bạn. unixODBC mặc định để tìm kiếm 'odbc.ini' và' odbcinst.ini' trong '/ etc'. Nó cũng sẽ kiểm tra thư mục nhà của người dùng cho '.odbc.ini' và' .odbcinst.ini'. (FreeTDS thực hiện tương tự với 'freetds.conf' /' .freetds.conf', cho bản ghi.) – FlipperPA

+0

Tác vụ này (mặc dù tôi đã phải gỡ cài đặt và cài đặt lại trình điều khiển https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/cài đặt-the-microsoft-odbc-driver-cho-sql-server), nhưng có một lỗi nhỏ: '' 'sudo ln -s/usr/local/etc/odbc. ini/etc/odbc.ini''' – alexvicegrab

+0

Lỗi này cũng có thể xảy ra nếu bạn đã cập nhật lên phiên bản trình điều khiển mới. Nếu nội dung hiện có kiểm tra nội dung của /etc/odbcinst.ini tức là: $ cat/etc/odbcinst.ini [ODBC driver 17 cho SQL Server] Description = Microsoft ODBC driver 17 cho SQL Server Driver =/opt/microsoft/msodbcsql/lib64/libmsodbcsql-17.0.so.1.1 UsageCount = 1 Sau đó cập nhật nội dung của scipt của bạn để sử dụng trình điều khiển mới. Trong trường hợp này trình điều khiển được cập nhật từ phiên bản 13 lên phiên bản 17. Tôi đề nghị bạn thêm thông tin này để hoàn thành. – earnshae

1

Trong trường hợp của tôi, tôi phải thay đổi chuỗi lái xe pyodbc cơ sở dữ liệu để
driver='{ODBC Driver 17 for SQL Server}'

trên thực tế, trong mã python tôi pyodbc đã mong ODBC driver 13
nhưng, như phiên bản driver ODBC đã được cập nhật (vì cập nhật ubuntu) lên phiên bản hiện tại Trình điều khiển ODBC 17, sự cố đã xảy ra.

Các vấn đề liên quan