1. Instalar los drivers necesarios
# 1. Añadir el repositorio de Microsoft
# 1.1 Importar la clave GPG de Microsoft
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
# 1.2 Añadir el repositorio (ajusta según tu versión de Ubuntu)
curl https://packages.microsoft.com/config/ubuntu/24.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
# Si no tienes Ubuntu 24.04, comprueba tu versión con lsb_release -a y ajusta la URL (hay listas para 20.04, 22.04, 24.04, etc.)
# 1.3 Actualizamos
sudo apt-get update
# 2. Instalar el driver ODBC
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18
#Nota: msodbcsql18 es la versión actual recomendada
#3. Instalar herramientas ODBC generales (recomendado)
sudo apt-get install -y unixodbc unixodbc-dev
#4. Instalar pyodbc en Python
pip install pyodbc
#5. Verificar que el driver se instaló bien
odbcinst -q -d
# Deberías ver algo como [ODBC Driver 18 for SQL Server].
2. Ejemplo complejo de utilización con python
Importante de este ejemplo:
1. La contraseña es para todo el gestor de base de datos. Por tanto todas las bases de datos tienen la misma contrasena.
2. Se requiere el prefijo "dbo" para todas las tablas (parwece ser que es el esquema por defecto
2. Inicialmente ponemos las credenciales para la BD "CADASTRE_2019", pero indicando como prefijo de la tabla otra BD se acceden las tablas de otras BD. En este caso se acceden a "BIB_AY" y "ACCEDE"
import pyodbc # Datos de conexión server = '192.168.XX.XX' # IP del servidor (puede incluir puerto: '192.168.XX.XX,1433') database = 'CADASTRE_2019' username = 'myuser' password = 'mypassword' # Cadena de conexión conn_str = ( f'DRIVER={{ODBC Driver 18 for SQL Server}};' f'SERVER={server};' f'DATABASE={database};' f'UID={username};' f'PWD={password};' f'TrustServerCertificate=yes;' # Necesario si no hay certificado SSL válido #f'Encrypt=yes;' ) csvs=[ "LHA4Y-LN6DQ-EQLN4","W5NZC-CLPPY-SBM7E","U2AH8-75JLU-CQPNT","20A78-56PIB-SR05R", "X1HWX-S8Y58-W9NQR", # Decret "X8XZN-LID9N-13HYB", # Decret "Y539O-X7X3S-JF6WE", # Transferencia ] sql_select=( " SELECT A.IIM_IDX, A.IIM_CVA, " + #//-- (0,1)Nombre doc, CSV " B.IDX_ALI, B.IDX_CP1, B.IDX_FFD, " + #//-- (2,3,4)Documento 2 , Identificadores 2, Firmado " 10000*YEAR(B.IDX_FCH)+100*MONTH(B.IDX_FCH)+DAY(B.IDX_FCH) as FOLDER, " + #//(5) " B.IDX_EXT, " + #//-- (6) Extension archivo " C.TDO_DES, C.TDO_DE1, " + #//-- (7,8)Documento 1, identificadores 1 " X.FIR_FCH, " + #//-- (9)Fecha de la firma " " D.UOR_NOM, D1.UOR_NOM AS NOM_1, " + #//-- (10,11)Cargos (firmante y en nombre) " E.USU_NOM, " + #//-- (12)Nombre firmante " X.FIR_SIG " + #//-- (13) Id de la firma " FROM BIB_AY.dbo.IDX_IMP A " + " JOIN BIB_AY.dbo.IDX B ON B.IDX_ID=A.IIM_IDX " + " JOIN ACCEDE_ADM.dbo.TDO C ON TDO_ID=B.IDX_TDO " + " LEFT JOIN BIB_AY.dbo.FIR X ON X.FIR_IDX=A.IIM_IDX " + " LEFT JOIN ACCEDE_ADM.dbo.A_ORG_UOR D ON D.UOR_COD=X.FIR_UOR " + " LEFT JOIN ACCEDE_ADM.dbo.A_ORG_UOR D1 ON D1.UOR_COD=X.FIR_UOR_SUS " + " LEFT JOIN ACCEDE_ADM.dbo.A_USU E ON E.USU_IDE=X.FIR_USU " ) sql_where = f" WHERE A.IIM_CVA='{csvs[0]}' OR A.IIM_IDX=498592" sql_order_by= " ORDER BY A.IIM_CVA, X.FIR_FCH"; sql_ = sql_select + sql_where + sql_order_by try: conn = pyodbc.connect(conn_str) cursor = conn.cursor()# # Ejecutar consulta #cursor.execute("SELECT * FROM dbo.TEBA01") cursor.execute(sql_) # Obtener resultados rows = cursor.fetchall() for row in rows: print(row) except pyodbc.Error as e: print("Error de conexión:", e) finally: if 'conn' in locals(): conn.close()
No hay comentarios :
Publicar un comentario