sql >> Base de Datos >  >> RDS >> Sqlserver

Servidor SQL, Python y OS X

Resumen

Estoy usando una Mac en Yosemite versión 10.10.1 tratando de conectarme a una base de datos de MS SQL Server. Busqué y no pude encontrar una respuesta detallada actualizada, así que aquí hay un artículo que proviene principalmente de este increíble artículo aquí . Lo estoy agregando en stackoverflow en caso de que el enlace muera. La idea es que tendremos las siguientes capas para configurar/conectar.

Capas

  • PARTE 1 - pyodbc
  • PARTE 2:freeTDS (puede consultar con tsql)
  • PARTE 3 - unixODBC (puede consultar con isql)
  • PARTE 4:MS SQL (se puede verificar con un programa Python normal)

Pasos

  1. Instalar Homebrew desde aquí - este es un administrador de paquetes para Mac OSX. El artículo muestra cómo usar otro administrador de paquetes 'MacPorts'. Para mis instrucciones, son con homebrew. Básicamente, homebrew tiene una carpeta 'bodega' que contiene diferentes versiones de paquetes. En lugar de modificar sus archivos normales, apunta a estos paquetes homebrew.

  2. Necesitamos instalar Pyodbc, pero pyodbc usa controladores iODBC de forma predeterminada (que viene instalado con Mac), pero muchas personas tienen problemas para que funcione. Entonces, vamos a usar una alternativa llamada unixodbc , que instalaríamos en el futuro. Por ahora, necesitamos configurar la instalación de pyodbc para que funcione con unixodbc.

Vaya a PyPi y descargue pyodbc tarball y descomprímalo. Luego cambie estas líneas en setup.py :

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

a:

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

y ahora ejecute python setup.py install .

Esto hace que nuestra instalación de pyodbc utilice controladores unixodbc de forma predeterminada. ¡Perfecto!

  1. Instalar FreeTDS con brew install freetds --with-unixodbc (FreeTDS es el controlador que se encuentra entre Mac ODBC y MS SQL Server, esto el gráfico aquí muestra qué versión de TDS debe usar en función de su versión específica de Microsoft Server; p.ej. protocolo tds 7.2 para Microsoft SQL Server 2008).

  2. Configurar freetds.conf (El archivo debe estar en '/usr/local/etc/freetds.conf', que para Homebrew es un enlace para decir '/usr/local/Cellar/freetds/0.91_2/etc', pero el suyo podría estar en otro lugar dependiendo de la versión). Edité el global y agregué la información de mi base de datos al final (por alguna razón, 'tds version =7.2' arrojaría un error, pero aún funciona, mientras que 8.0 solo funciona):

    [global]
    # TDS protocol version
    tds version = 8.0
    
    [MYSERVER]
    host = MYSERVER
    port = 1433
    tds version = 8.0
    
  3. Verificar FreeTDS instalado correctamente con:tsql -S myserver -U myuser -P mypassword (Debería ver un aviso como este si funcionó)

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

  5. Configure sus archivos de configuración de unixODBC , que incluye odbcinst.ini (configuración del controlador) y odbc.ini (archivo de configuración de DSN). Por defecto, mis archivos estaban en:/Library/ODBC (Nota:NO es mi biblioteca de usuario, también conocida como /Users/williamliu/Library). O también podrían estar en el directorio de instalación de homebrew /usr/local/Cellar/unixodbc/<version>/etc .

  6. Abra su 'odbcinst.ini ' y luego agregue lo siguiente (Nota:diferente si usa MacPorts. Para Homebrew, este archivo es un enlace a la versión homebrew, por ejemplo, el mío está en '/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. Abra su 'odbc.ini ' y luego agregue lo siguiente (generalmente junto con 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. Verificar unixODBC instalado correctamente con:isql MYSERVER MYUSER MYPASSWORD . Si recibe un error que indica que no puede conectarse, agregue -v para comprobar cuál es el resultado detallado y solucionarlo. De lo contrario, debería ver esto:

    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+ 
    
  9. Ahora verifique que pyodbc funcione con un programa python. Ejecute python en el shell o un archivo .py con esto y debería recuperar su consulta:

    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)
    

Puede consultar la documentación . de pyodbc para obtener más ayuda después de esto.