Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server, Python et OS X

Résumé

J'utilise un Mac sur Yosemite Version 10.10.1 essayant de me connecter à une base de données MS SQL Server. J'ai cherché et je n'ai pas trouvé de réponse détaillée mise à jour, alors voici un article qui provient principalement de cet article étonnant ici . Je l'ajoute sur stackoverflow au cas où le lien mourrait. L'idée est que nous aurons les couches suivantes à configurer/connecter.

Calques

  • PARTIE 1 - pyodbc
  • PARTIE 2 - freeTDS (peut vérifier avec tsql)
  • PARTIE 3 - unixODBC (peut vérifier avec isql)
  • PARTIE 4 - MS SQL (peut vérifier avec un programme python standard)

Étapes

  1. Installez Homebrew de ici - c'est un gestionnaire de paquets pour Mac OSX. L'article montre comment utiliser un autre gestionnaire de paquets 'MacPorts'. Pour mes instructions, ils sont avec homebrew. Fondamentalement, homebrew a un dossier 'cellar' qui contient différentes versions de packages. Au lieu de modifier vos fichiers normaux, il pointe plutôt vers ces packages homebrew.

  2. Nous devons installer Pyodbc, mais pyodbc utilise les pilotes iODBC par défaut (qui sont installés avec mac), mais de nombreuses personnes ont des problèmes pour le faire fonctionner. Nous allons donc utiliser une alternative appelée unixodbc , que nous installerions à l'avenir. Pour l'instant, nous devons configurer l'installation de pyodbc de sorte qu'elle fonctionne avec unixodbc.

Allez sur PyPi et téléchargez l'archive tarball pyodbc et décompressez-la. Modifiez ensuite ces lignes dans 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')

et lancez maintenant python setup.py install .

Cela fait que notre installation pyodbc utilise les pilotes unixodbc par défaut. Parfait !

  1. Installer FreeTDS avec brew install freetds --with-unixodbc (FreeTDS est le pilote qui se situe entre Mac ODBC et MS SQL Server, ceci le tableau ci-dessous indique la version de TDS que vous devez utiliser en fonction de votre version spécifique de Microsoft Server ; par exemple. protocole tds 7.2 pour Microsoft SQL Server 2008).

  2. Configurer freetds.conf file (Le fichier doit être dans '/usr/local/etc/freetds.conf', qui pour Homebrew est un lien pour dire '/usr/local/Cellar/freetds/0.91_2/etc', mais le vôtre peut être quelque part différent selon versions). J'ai modifié le global et ajouté mes informations de base de données à la fin (pour une raison quelconque, 'tds version =7.2' générerait une erreur, mais fonctionnerait toujours, alors que 8.0 fonctionne simplement):

    [global]
    # TDS protocol version
    tds version = 8.0
    
    [MYSERVER]
    host = MYSERVER
    port = 1433
    tds version = 8.0
    
  3. Vérifiez que FreeTDS est installé correctement avec :tsql -S myserver -U myuser -P mypassword (vous devriez voir une invite comme celle-ci si cela a fonctionné)

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

  5. Configurez vos fichiers de configuration unixODBC , qui inclut odbcinst.ini (configuration du pilote) et odbc.ini (fichier de configuration DSN). Par défaut, mes fichiers étaient dans :/Library/ODBC (Remarque :PAS ma bibliothèque utilisateur alias /Users/williamliu/Library). Ou ils pourraient également être dans votre répertoire d'installation homebrew /usr/local/Cellar/unixodbc/<version>/etc .

  6. Ouvrez votre 'odbcinst.ini ' puis ajoutez ce qui suit (Remarque :Différent si vous utilisez MacPorts. Pour Homebrew, ce fichier est un lien vers la version homebrew, par exemple le mien se trouve dans '/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. Ouvrez votre 'odbc.ini ' puis ajoutez ce qui suit (généralement avec 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. Vérifier unixODBC installé correctement avec :isql MYSERVER MYUSER MYPASSWORD . Si vous obtenez une erreur indiquant que vous ne pouvez pas vous connecter, ajoutez alors -v pour vérifier quelle est la sortie détaillée et la corriger. Sinon, vous devriez voir ceci :

    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+ 
    
  9. Maintenant, vérifiez que pyodbc fonctionne avec un programme python. Exécutez python dans le shell ou un fichier .py avec ceci et vous devriez récupérer votre requête :

    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)
    

Vous pouvez vous référer à la documentation de pyodbc pour obtenir plus d'aide après cela.