Saltar al contenido

Conecte docker python al servidor SQL con pyodbc

Solución:

Necesita correr:

sudo apt-get install gcc

Necesito agregar un archivo odbcinst.ini que contenga:

[FreeTDS]Description=FreeTDS Driver Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so

Necesito agregar lo siguiente al archivo Docker.

ADD odbcinst.ini /etc/odbcinst.ini
RUN apt-get update
RUN apt-get install -y tdsodbc unixodbc-dev
RUN apt install unixodbc-bin -y
RUN apt-get clean -y

Necesito cambiar la conexión en .py a

connection = pyodbc.connect('Driver={FreeTDS};'
                            'Server=xxxxx;'
                            'Database=DCMM;'
                            'UID=xxxxx;'
                            'PWD=xxxxx')

Ahora el contenedor se compila y obtiene datos del servidor SQL

Al revisar esto recientemente, descubrí que era necesario incluir adicionalmente la siguiente línea (tenga en cuenta que no se compiló sin este paso):

RUN apt-get install --reinstall build-essential -y

El Dockerfile completo tiene el siguiente aspecto:

# parent image
FROM python:3.7-slim

# install FreeTDS and dependencies
RUN apt-get update 
 && apt-get install unixodbc -y 
 && apt-get install unixodbc-dev -y 
 && apt-get install freetds-dev -y 
 && apt-get install freetds-bin -y 
 && apt-get install tdsodbc -y 
 && apt-get install --reinstall build-essential -y

# populate "ocbcinst.ini"
RUN echo "[FreeTDS]n
Description = FreeTDS unixODBC Drivern
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.son
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so" >> /etc/odbcinst.ini

# install pyodbc (and, optionally, sqlalchemy)
RUN pip install --trusted-host pypi.python.org pyodbc==4.0.26 sqlalchemy==1.3.5

# run app.py upon container launch
CMD ["python", "app.py"]

Aquí hay una forma de establecer la conexión dentro de app.py, a través de sqlalchemy (y asumiendo el puerto 1433):

import sqlalchemy as sa
args = (username, password, server, database)
connstr = "mssql+pyodbc://{}:{}@{}/{}?driver=FreeTDS&port=1433&odbc_options="TDS_Version=8.0""
engine = sa.create_engine(connstr.format(*args))

Según la respuesta de Kåre Rasmussen, aquí hay un archivo docker completo para su uso posterior.

¡Asegúrese de editar las dos últimas líneas de acuerdo con su arquitectura! Deben reflejar las rutas reales a libtdsodbc.so y libtdsS.so.

Si no está seguro de las rutas a libtdsodbc.so y libtdsS.so, intente dpkg --search libtdsodbc.so y dpkg --search libtdsS.so.

FROM python:3

#Install FreeTDS and dependencies for PyODBC
RUN apt-get update && apt-get install -y tdsodbc unixodbc-dev 
 && apt install unixodbc-bin -y  
 && apt-get clean -y

RUN echo "[FreeTDS]n
Description = FreeTDS unixODBC Drivern
Driver = /usr/lib/arm-linux-gnueabi/odbc/libtdsodbc.son
Setup = /usr/lib/arm-linux-gnueabi/odbc/libtdsS.so" >> /etc/odbcinst.ini

Luego, instale PyODBC, COPIE su aplicación y ejecútela.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *