ibm_db conectar con as400 python macos db2 pyodbc

conectar - python connect to as400



DB2 utilizando pyodbc en Mac OSX (2)

Intento conectarme a una base de datos DB2 utilizando pyodbc en Mac OS X y parece que no puedo hacerlo funcionar. He tenido éxito usando FreeTDS para conectarme a MS SQL Server en condiciones similares.

Primero, instalé db2exc_client_952_MAC_x86_64 de IBM. Después de instalarlo con éxito, fui a agregar el controlador a través del administrador de ODBC.

Luego intenté ejecutar este pitón:

import pyodbc cnxn = pyodbc.connect(''Driver={IBM DB2 ODBC Driver}; Hostname=myhost.com; Port=50300; Protocol=TCPIP; Database=DB2ET; CurrentSchema=SCHM1; UID=MYUID; PWD=MYPWD;'');

Y recibo este error:

Rastreo (llamada más reciente): Archivo "", línea 1, en pyodbc.Error: (''HY000'', ''[] / xf8 / x92 / x90 / x81 / x9b / xf8 / x93 / x90 / x81 / x82 / xf8 / x96 / xb0 / x81 / x9d / xf8 / x93 / x80 / x81 / x83 / xf8 / x88 / x80 / x81 / x89 / xf8 / x9c / xa0 / x81 / x84 / xf8 / x9d / xa0 / x81 / xa9 / xf8 / x9c / xa0 / x81 / xa5 / xf8 / x88 / x80 / x81 / x9d / xf8 / x94 / x90 / x81 / x93 / xf8 / x8c / x90 / x81 / x8c / xf8 / x8c / xa0 / x80 / xb0 / xf8 / x93 / xa0 / x80 / xb4 / xf8 / x88 / x80 / x80 / xa0 / xf8 / x88 / x80 / x81 / x81 / xf8 / x98 / x90 / x81 / xa4 / xf8 / x98 / x90 / x81 / xb4 / xf8 / x98 / x90 / x81 / xa2 / xf8 / x99 / x90 / x81 / xb3 / xf8 / x98 / xb0 / x80 / xa0 / xf8 / x9b / xa0 / x81 / xaf / xf8 / x99 / x90 / x81 / xae / xf8 / x9d / x80 / x81 / xa3 / xf8 / x9b / xb0 / x81 / xa9 / xf8 / x88 / x80 / x81 / xae / xf8 / x9b / xb0 / x81 / xa4 / xf8 / x9c / xb0 / x81 / xa5 / xf8 / x9b / xa0 / x80 / xa0 / xf8 / x9d / x80 / x81 / xaf / xf8 / x99 / x90 / x80 / xa0 / xf8 / x9a / x90 / x81 / xb8 / xf8 / x9d / x80 / x81 / xb3 / xf8 / x88 / x80 / x80 / xae / xf8 / x94 / xb0 / x80 / xa0 / xf8 / x93 / x80 / x81 / x91 / xf8 / x95 / x80 / x81 / x93 / xf8 / x95 / x80 / x81 / x81 / xf8 / x8f / x90 / x81 / x85 / xf8 / x8e / x80 / x80 / xb0 / xf8 / x8c / x80 / x80 / xb0 / xf2 / xa0 / x80 / xb3 / xfc / xa0 / x9c / xb0 / x80 / x80 / xfd / xa1 / x99 / x82 / x81 / xa1 / xfd / xa1 / x98 / xa6 / x85 / xb4 / xfd / xa9 / x88 / x86 / x95 / xb3 / xfd / x82 / x91 / x82 / x81 / xae / xfd / xaf / x99 / xa2 / x80 / xb2 / xfd / x96 / x93 / x92 / x81 / xb2 / xfd / x93 / x82 / xa2 / xb9 / x93 / xff / x7f ( -1024) (SQLDriverConnect) '')

De la búsqueda descubrí que HY000 puede ser un problema de connectionString, pero no estoy seguro de cómo descifrar el resto del error.

¿Algunas ideas?


Parece que las cadenas de conexión varían según la base de datos y que la cadena de conexión que está utilizando no es compatible con DB2.

Aquí hay algunas cadenas de conexión de ejemplo de DB2:

http://www.connectionstrings.com/ibm-db2

Esta es la mejor referencia que pude encontrar sobre lo que es válido en una cadena de conexión de DB2:

http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=%2Fcom.ibm.swg.im.dbclient.adonet.ref.doc%2Fdoc%2FDB2ConnectionClass.html

Basado en eso, convertiría su cadena de conexión de:

Driver={IBM DB2 ODBC Driver}; Hostname=myhost.com; Port=50300; Protocol=TCPIP; Database=DB2ET; CurrentSchema=SCHM1; UID=MYUID; PWD=MYPWD;

A:

Driver={IBM DB2 ODBC Driver}; Server=myhost.com:50300; Database=DB2ET; CurrentSchema=SCHM1; UID=MYUID; PWD=MYPWD;


Así es como se ve mi cadena de conexión en PHP (sé que estás usando Python, pero creo que son muy similares):

$this->db_connection = new PDO("odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=10.xxx.xxx.xxx;PROTOCOL=TCPIP", $temp_username, $temp_password);

Tenga en cuenta que digo "SYSTEM = ..." y dice "Hostname = ..." - Creo que eso podría ser importante.

¿Tu DSN está configurado por completo? En mis máquinas Linux tengo dos archivos que contienen toda nuestra información de configuración para DSN.

odbc.ini

[primary] Description = primary Driver = iSeries Access ODBC Driver System = xxx.xxx.xxx.xxx UserID = xxxxxxxxxx Password = xxxxxxxxxx Naming = 0 DefaultLibraries = QGPL Database = xxxxxxxxxx ConnectionType = 0 CommitMode = 2 ExtendedDynamic = 0 DefaultPkgLibrary = QGPL DefaultPackage = A/DEFAULT(IBM),2,0,1,0,512 AllowDataCompression = 1 LibraryView = 0 AllowUnsupportedChar = 0 ForceTranslation = 0 Trace = 0

y odbcinst.ini

[iSeries Access ODBC Driver] Description = iSeries Access for Linux ODBC Driver Driver = /usr/lib/libcwbodbc.so Setup = /usr/lib/libcwbodbcs.so NOTE1 = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN''s, NOTE2 = the following Driver64/Setup64 keywords will provide that support. Driver64 = /usr/lib/lib64/libcwbodbc.so Setup64 = /usr/lib/lib64/libcwbodbcs.so Threading = 2 DontDLClose = 1 UsageCount = 1

Creo que ingresas información similar en el diálogo que muestras, probablemente debajo de la pestaña DSN.

¿Ha habilitado el trazado de ODBC? Para hacer esto en Linux, tengo que agregar esto al archivo odbcinst.ini:

[ODBC] Trace = Yes TraceFile = /tmp/odbc.log

Esto arrojó MUCHA información para mí y me ayudó a diagnosticar algunos problemas que tuve en el pasado.

Según esta página (http://code.google.com/p/pyodbc/wiki/ConnectionStrings), "lo más importante que se debe saber es que pyodbc ni siquiera mira la cadena de conexión: se pasa directamente a SQLDriverConnect sin modificaciones ". Si eso es cierto, cambiar tu "Nombre de host" por "SISTEMA" debería ser el truco.

EDITAR

¿Hay alguna posibilidad de que esto sea un problema con la codificación? Unicode tratando de hablar con un servidor UTF-8 (o algo similar)? ¿Has intentado configurar el CCSID? Cuando configura el controlador, ¿tiene opciones como "BinAsChar", "CCSID" o "Host CCSID"?

Por defecto, creo que el CCSID es 37 (EE. UU./Canadá) y creo que Unicode es 1208.