Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server, Python i OS X

Podsumowanie

Używam komputera Mac na Yosemite w wersji 10.10.1, próbując połączyć się z bazą danych MS SQL Server. Szukałem i nie mogłem znaleźć zaktualizowanej szczegółowej odpowiedzi, więc oto zapis, który pochodzi głównie z tego niesamowitego artykułu tutaj . Dodaję go na stackoverflow na wypadek śmierci łącza. Pomysł polega na tym, że będziemy mieć następujące warstwy do konfiguracji/połączenia.

Warstwy

  • CZĘŚĆ 1 - pyodbc
  • CZĘŚĆ 2 – freeTDS (można sprawdzić za pomocą tsql)
  • CZĘŚĆ 3 - unixODBC (można sprawdzić za pomocą isql)
  • CZĘŚĆ 4 - MS SQL (można sprawdzić za pomocą zwykłego programu Pythona)

Kroki

  1. Zainstaluj Homebrew z tutaj - jest to menedżer pakietów dla Mac OSX. Artykuł pokazuje, jak korzystać z innego menedżera pakietów 'MacPorts'. Zgodnie z moimi instrukcjami są z homebrew. Zasadniczo homebrew ma folder „piwnica”, w którym znajdują się różne wersje pakietów. Zamiast modyfikować twoje normalne pliki, zamiast tego wskazuje te pakiety homebrew.

  2. Musimy zainstalować Pyodbc, ale pyodbc domyślnie używa sterowników iODBC (które są instalowane z komputerem Mac), ale wiele osób ma problemy z jego działaniem. Więc użyjemy alternatywy o nazwie unixodbc , który zainstalujemy w przyszłości. Na razie musimy skonfigurować instalację pyodbc tak, aby działała z unixodbc.

Przejdź do PyPi i pobierz pyodbc tarball i rozpakuj go. Następnie zmień te wiersze w setup.py :

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

do:

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

a teraz uruchom python setup.py install .

To sprawia, że ​​nasza instalacja pyodbc domyślnie używa sterowników unixodbc. Idealnie!

  1. Zainstaluj FreeTDS z brew install freetds --with-unixodbc (FreeTDS to sterownik, który znajduje się pomiędzy Mac ODBC i MS SQL Server, to wykres tutaj pokazuje, której wersji TDS należy używać w oparciu o konkretną wersję serwera Microsoft; np. protokół tds 7.2 dla Microsoft SQL Server 2008).

  2. Skonfiguruj freetds.conf plik (Plik powinien znajdować się w '/usr/local/etc/freetds.conf', co w przypadku Homebrew oznacza '/usr/local/Cellar/freetds/0.91_2/etc', ale twój może być w innym miejscu w zależności od wersji). Edytowałem globalne i dodałem informacje o mojej bazie danych na końcu (z jakiegoś powodu 'tds version =7.2' spowodowałby błąd, ale nadal działa, podczas gdy 8.0 po prostu działa):

    [global]
    # TDS protocol version
    tds version = 8.0
    
    [MYSERVER]
    host = MYSERVER
    port = 1433
    tds version = 8.0
    
  3. Zweryfikuj zainstalowaną FreeTDS poprawnie z:tsql -S myserver -U myuser -P mypassword (powinieneś zobaczyć taki komunikat, jeśli zadziałał)

    locale is "en_US.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    1>
    
  4. Zainstaluj unixODBC z brew install unixodbc .

  5. Skonfiguruj swoje pliki konfiguracyjne unixODBC , który obejmuje odbcinst.ini (konfiguracja sterownika) i odbc.ini (plik konfiguracyjny DSN). Domyślnie moje pliki znajdowały się w:/Library/ODBC (Uwaga:NIE moja biblioteka użytkownika aka /Users/williamliu/Library). Mogą też znajdować się w katalogu instalacyjnym homebrew /usr/local/Cellar/unixodbc/<version>/etc .

  6. Otwórz swój „odbcinst.ini ', a następnie dodaj następujący (Uwaga:inny, jeśli używasz MacPorts. W przypadku Homebrew ten plik jest linkiem do wersji homebrew, np. mój znajduje się w '/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. Otwórz swój „odbc.ini ', a następnie dodaj następujące (zwykle jest to razem z 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. Zweryfikuj unixODBC poprawnie zainstalowany z:isql MYSERVER MYUSER MYPASSWORD . Jeśli pojawi się błąd, z którym nie możesz się połączyć, dodaj -v aby sprawdzić, co to jest pełne wyjście i naprawić. W przeciwnym razie powinieneś zobaczyć to:

    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+ 
    
  9. Teraz zweryfikuj działanie pyodbc z programem Python. Uruchom Pythona w powłoce lub pliku .py z tym i powinieneś odzyskać swoje zapytanie:

    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)
    

Możesz zapoznać się z dokumentacją pyodbc, aby uzyskać dalszą pomoc po tym.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obliczanie rozmiaru kopii zapasowej bazy danych

  2. Hibernacja:W SQL Server 2008 kolumna została zmieniona z datetime na datetime2. Jak mogę zaktualizować konfigurację hibernacji, aby to odzwierciedlić?

  3. Co uczenie maszynowe oznacza dla specjalistów od baz danych

  4. błąd konwersji varchar na float

  5. Niszczenie XML z planów wykonania