Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server, Python và OS X

Tóm tắt

Tôi đang sử dụng máy Mac trên Yosemite Phiên bản 10.10.1 đang cố gắng kết nối với cơ sở dữ liệu MS SQL Server. Tôi đã tìm kiếm và không thể tìm thấy câu trả lời chi tiết được cập nhật, vì vậy đây là bài viết chủ yếu là từ bài viết tuyệt vời này tại đây . Tôi sẽ thêm nó vào stackoverflow trong trường hợp liên kết bị chết. Ý tưởng là chúng ta sẽ có các lớp sau để thiết lập / kết nối.

Lớp

  • PHẦN 1 - pyodbc
  • PHẦN 2 - freeTDS (có thể kiểm tra bằng tsql)
  • PHẦN 3 - unixODBC (có thể kiểm tra bằng isql)
  • PHẦN 4 - MS SQL (có thể kiểm tra bằng chương trình python thông thường)

Các bước

  1. Cài đặt Homebrew từ tại đây - đây là trình quản lý gói cho Mac OSX. Bài viết hướng dẫn cách sử dụng một trình quản lý gói khác 'MacPorts'. Đối với các hướng dẫn của tôi, chúng bằng homebrew. Về cơ bản homebrew có một thư mục 'hầm' chứa các phiên bản khác nhau của các gói. Thay vì sửa đổi các tệp bình thường của bạn, nó trỏ đến các gói phần mềm homebrew này.

  2. Chúng tôi cần cài đặt Pyodbc, nhưng pyodbc sử dụng trình điều khiển iODBC theo mặc định (được cài đặt với mac), nhưng nhiều người gặp vấn đề khi làm việc này. Vì vậy, chúng tôi sẽ sử dụng một giải pháp thay thế có tên là unixodbc , mà chúng tôi sẽ cài đặt trong tương lai. Hiện tại, chúng ta cần định cấu hình cài đặt pyodbc để nó hoạt động với unixodbc.

Truy cập PyPi và tải xuống pyodbc tarball và giải nén nó. Sau đó, thay đổi các dòng này trong setup.py :

elif sys.platform == 'darwin':
        # OS/X now ships with iODBC.
        settings['libraries'].append('iodbc')

tới:

elif sys.platform == 'darwin':
        # OS/X now ships with iODBC.
        settings['libraries'].append('odbc')

và bây giờ hãy chạy python setup.py install .

Điều này làm cho cài đặt pyodbc của chúng tôi sử dụng trình điều khiển unixodbc theo mặc định. Hoàn hảo!

  1. Cài đặt FreeTDS với brew install freetds --with-unixodbc (FreeTDS là trình điều khiển nằm giữa Mac ODBC và MS SQL Server, cái này biểu đồ ở đây cho thấy bạn nên sử dụng phiên bản TDS nào dựa trên phiên bản Microsoft Server cụ thể của bạn; ví dụ. giao thức tds 7.2 dành cho Microsoft SQL Server 2008).

  2. Định cấu hình freetds.conf (Tệp phải ở dạng '/usr/local/etc/freetds.conf', đối với Homebrew là một liên kết có nội dung '/usr/local/Cellar/freetds/0.91_2/etc', nhưng tệp của bạn có thể ở đâu đó khác tùy thuộc vào phiên bản). Tôi đã chỉnh sửa toàn cục và thêm thông tin cơ sở dữ liệu của mình vào cuối (vì một số lý do 'tds version =7.2' sẽ gặp lỗi, nhưng vẫn hoạt động, trong khi 8.0 chỉ hoạt động):

    [global]
    # TDS protocol version
    tds version = 8.0
    
    [MYSERVER]
    host = MYSERVER
    port = 1433
    tds version = 8.0
    
  3. Xác minh FreeTDS đã được cài đặt đúng với:tsql -S myserver -U myuser -P mypassword (bạn sẽ thấy một lời nhắc như thế này nếu nó hoạt động)

    Bộ ký tự ngôn ngữ
    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    1>
    
  4. Cài đặt unixODBC với brew install unixodbc .

  5. Thiết lập tệp cấu hình unixODBC của bạn , bao gồm odbcinst.ini (cấu hình trình điều khiển) và odbc.ini (Tập tin cấu hình DSN). Theo mặc định, các tệp của tôi nằm trong:/Library/ODBC (Lưu ý:KHÔNG PHẢI thư viện người dùng của tôi aka / Users / williamliu / Library). Hoặc chúng cũng có thể nằm trong thư mục cài đặt homebrew của bạn /usr/local/Cellar/unixodbc/<version>/etc .

  6. Mở ' odbcinst.ini của bạn 'và sau đó thêm tệp sau (Lưu ý:Khác nếu bạn sử dụng MacPorts. Đối với Homebrew, tệp này là một liên kết đến phiên bản homebrew, ví dụ:của tôi ở trong' /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
    
  7. Mở ' odbc.ini của bạn 'và sau đó thêm phần sau (phần này thường cùng với 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
    
  8. Xác minh unixODBC được cài đặt đúng với:isql MYSERVER MYUSER MYPASSWORD . Nếu bạn gặp lỗi không thể kết nối, hãy thêm -v để kiểm tra đầu ra dài dòng là gì và sửa lỗi đó. Nếu không, bạn sẽ thấy điều này:

    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+ 
    
  9. Bây giờ xác minh pyodbc hoạt động với một chương trình python. Chạy python trong shell hoặc tệp .py với tệp này và bạn sẽ lấy lại truy vấn của mình:

    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)
    

Bạn có thể tham khảo tài liệu của pyodbc để nhận thêm trợ giúp sau việc này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có bao nhiêu ký tự trong varchar (max)?

  2. Nhận số ngày trong tuần (Chủ nhật, Thứ Hai, Thứ Ba) giữa hai ngày SQL

  3. Chuỗi được phân tách bằng dấu phẩy thành cột của bảng trong SQL Server

  4. Dbo chính của SQL Server không tồn tại,

  5. Tại sao SQL Server tự động bỏ qua khoảng trống ở cuối?