Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server, Python и OS X

Резюме

Използвам Mac на Yosemite версия 10.10.1, опитвайки се да се свържа с база данни на MS SQL Server. Търсих и не можах да намеря актуализиран подробен отговор, така че ето описание, което е предимно от тази невероятна статия тук . Добавям го в stackoverflow, в случай че връзката умре. Идеята е, че ще имаме следните слоеве за настройка/свързване.

Слоеве

  • ЧАСТ 1 - pyodbc
  • ЧАСТ 2 - freeTDS (може да се провери с tsql)
  • ЧАСТ 3 - unixODBC (може да се провери с isql)
  • ЧАСТ 4 - MS SQL (може да се провери с обикновена програма на Python)

Стъпки

  1. Инсталирайте Homebrew от тук - това е мениджър на пакети за Mac OSX. Статията показва как да използвате друг мениджър на пакети „MacPorts“. За моя инструкция са с homebrew. По принцип homebrew има папка 'cellar', която съдържа различни версии на пакети. Вместо да променя нормалните ви файлове, той сочи към тези homebrew пакети.

  2. Трябва да инсталираме Pyodbc, но pyodbc използва iODBC драйвери по подразбиране (които идват инсталирани с mac), но много хора имат проблеми с работата му. Така че ще използваме алтернатива, наречена unixodbc , които бихме инсталирали в бъдеще. Засега трябва да конфигурираме инсталацията на pyodbc така, че да работи с unixodbc.

Отидете на PyPi и изтеглете pyodbc tarball и го декомпресирайте. След това променете тези редове в setup.py :

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

до:

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

и сега стартирайте python setup.py install .

Това кара нашата инсталация на pyodbc да използва unixodbc драйвери по подразбиране. Перфектно!

  1. Инсталирайте FreeTDS с brew install freetds --with-unixodbc (FreeTDS е драйверът, който се намира между Mac ODBC и MS SQL Server, това диаграмата тук показва коя версия на TDS трябва да използвате въз основа на вашата конкретна версия на Microsoft Server; напр. tds протокол 7.2 за Microsoft SQL Server 2008).

  2. Конфигурирайте freetds.conf файл (Файлът трябва да е в „/usr/local/etc/freetds.conf“, което за Homebrew е връзка, която казва „/usr/local/Cellar/freetds/0.91_2/etc“, но вашият може да е на друго място в зависимост от версията). Редактирах глобалната и добавих информацията за моята база данни в края (по някаква причина 'tds версия =7.2' ще даде грешка, но все още работи, докато 8.0 просто работи):

    [global]
    # TDS protocol version
    tds version = 8.0
    
    [MYSERVER]
    host = MYSERVER
    port = 1433
    tds version = 8.0
    
  3. Проверете инсталирането на FreeTDS правилно с:tsql -S myserver -U myuser -P mypassword (трябва да видите подкана като тази, ако работи)

    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    1>
    
  4. Инсталирайте unixODBC с brew install unixodbc .

  5. Настройте своите конфигурационни файлове за unixODBC , което включва odbcinst.ini (конфигурация на драйвер) и odbc.ini (DSN конфигурационен файл). По подразбиране моите файлове бяха в:/Library/ODBC (Забележка:НЕ е моята потребителска библиотека, известна още като /Users/williamliu/Library). Или те също могат да бъдат във вашата homebrew инсталационна директория /usr/local/Cellar/unixodbc/<version>/etc .

  6. Отворете вашия 'odbcinst.ini ' файл и след това добавете следното (Забележка:Различно, ако използвате MacPorts. За Homebrew този файл е връзка към версията homebrew, напр. моята е в '/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. Отворете вашия 'odbc.ini ' и след това добавете следното (това обикновено е заедно с 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. Потвърдете unixODBC инсталиран правилно с:isql MYSERVER MYUSER MYPASSWORD . Ако получите грешка, че не можете да се свържете, добавете -v за да проверите какъв е подробният изход и да го поправите. В противен случай трябва да видите това:

    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+ 
    
  9. Сега проверете дали pyodbc работи с програма на python. Стартирайте python в обвивката или .py файл с това и трябва да получите заявката си обратно:

    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)
    

Можете да се обърнете към документацията на pyodbc, за да получите повече помощ след това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да предам параметри с стойност на таблица от java към запаметена процедура на sql сървър?

  2. Вътрешни елементи на SQL Server:Проблемни оператори Pt. III – Сортове

  3. Промяна на таблици, които се репликират в SQL Server 2008 R2

  4. Използване на Intel Optane Storage за SQL Server

  5. Ред на изпълнение на SQL заявката