Fix SQL Server ODBC: usar alias SQLSERVER_BDUS en freetds.conf

This commit is contained in:
Panchito
2026-07-22 13:23:13 -05:00
parent 5778a3bd59
commit 10edae9231
3 changed files with 9 additions and 6 deletions

View File

@@ -17,10 +17,9 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
# Registrar el driver FreeTDS bajo el nombre "SQL Server" (el que usa data_manager.py)
RUN printf "[SQL Server]\nDescription = FreeTDS Driver\nDriver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so\nSetup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so\nFileUsage = 1\n" > /etc/odbcinst.ini
# Configurar FreeTDS explicitamente: version de protocolo TDS, puerto y cifrado.
# "encryption = off" evita fallos de negociacion con SQL Servers antiguos/mal configurados.
# TDSDUMP habilita un log detallado para diagnosticar fallos de conexion.
RUN printf "[global]\n\tport = 1433\n\ttds version = 7.3\n\tclient charset = UTF-8\n\tencryption = off\n" > /etc/freetds/freetds.conf
# Configurar FreeTDS: global + entrada específica para el servidor SQL.
# pyodbc busca la entrada por SERVER name en freetds.conf, por eso la definimos aquí.
RUN printf "[global]\n\tport = 1433\n\ttds version = 7.3\n\tclient charset = UTF-8\n\tencryption = off\n\n[SQLSERVER_BDUS]\n\thost = 191.98.134.80\n\tport = 1433\n\ttds version = 7.3\n" > /etc/freetds/freetds.conf
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

View File

@@ -43,8 +43,10 @@ class DataManager:
def sql_conn(self):
import pyodbc
# Usar un alias de servidor definido en /etc/freetds/freetds.conf (SQLSERVER_BDUS)
# en lugar de la IP directa, para que pyodbc/ODBC encuentre la configuración de FreeTDS.
conn_str = (
f"DRIVER={{SQL Server}};SERVER={self.sql_server};"
f"DRIVER={{SQL Server}};SERVER=SQLSERVER_BDUS;"
f"DATABASE={self.sql_db};UID={self.sql_user};PWD={self.sql_pass}"
)
return pyodbc.connect(conn_str)

View File

@@ -138,8 +138,10 @@ class DataManager:
def sql_conn(self):
import pyodbc
# Usar un alias de servidor definido en /etc/freetds/freetds.conf (SQLSERVER_BDUS)
# en lugar de la IP directa, para que pyodbc/ODBC encuentre la configuración de FreeTDS.
conn_str = (
f"DRIVER={{SQL Server}};SERVER={self.sql_server};"
f"DRIVER={{SQL Server}};SERVER=SQLSERVER_BDUS;"
f"DATABASE={self.sql_db};UID={self.sql_user};PWD={self.sql_pass}"
)
return pyodbc.connect(conn_str)