conectar con as400 python db2

con - python informix



Cómo conectar python a db2 (6)

¿Hay una manera to connect python to DB2 ?


Después de mucho excavar, descubrí cómo conectarme con DB2 usando ibm_db.

En primer lugar, si utiliza una versión de python superior a 3.2 use

pip instalar ibm_db == 2.0.8a

La versión 2.0.8 (la última) no se instalará.

luego usa lo siguiente para conectarte

import ibm_db_dbi as db conn = db.connect("DATABASE=name;HOSTNAME=host;PORT=60000;PROTOCOL=TCPIP;UID=username;PWD=password;", "", "")

lista de tablas con

for t in conn.tables(): print(t)

y ejecuta SQL con

cursor = conn.cursor() cursor.execute("SELECT * FROM Schema.Table") for r in cursor.fetchall(): print(r)

Consulte este enlace para ver la documentación no tan precisa.


Esto es para referencia futura:

Los documentos oficiales de instalación dicen:

Python 2.5 o posterior, excluyendo Python 3.X.

pip install ibm_db

Sólo funcionó en Python 2.7 para mí; no lo hizo para 3.X. Además, tuve que configurar Python 2.7 por defecto (en lugar de Python 3) para que la instalación funcionara (de lo contrario, habría errores de instalación).

Documentos oficiales de uso de la muestra :

import ibm_db ibm_db.connect("DATABASE=name;HOSTNAME=host;PORT=60000;PROTOCOL=TCPIP;UID=username; PWD=password;", "", "")


La documentación es difícil de encontrar, y una vez que la encuentras, es bastante abismal. Esto es lo que he encontrado en las últimas 3 horas.

ibm_db instalar ibm_db usando pip , de la siguiente manera:

pip install ibm_db

Usted querrá crear un objeto de conexión. La documentación está aquí.

Esto es lo que escribí:

from ibm_db import connect # Careful with the punctuation here - we have 3 arguments. # The first is a big string with semicolons in it. # (Strings separated by only whitespace, newlines included, # are automatically joined together, in case you didn''t know.) # The last two are emptry strings. connection = connect(''DATABASE=<database name>;'' ''HOSTNAME=<database ip>;'' # 127.0.0.1 or localhost works if it''s local ''PORT=<database port>;'' ''PROTOCOL=TCPIP;'' ''UID=<database username>;'' ''PWD=<username password>;'', '''', '''')

A continuación, debe saber que los comandos a ibm_db nunca le dan resultados. En su lugar, debe llamar a uno de los métodos de fetch en el comando, repetidamente, para obtener los resultados. Escribí esta función de ayuda para lidiar con eso.

def results(command): from ibm_db import fetch_assoc ret = [] result = fetch_assoc(command) while result: # This builds a list in memory. Theoretically, if there''s a lot of rows, # we could run out of memory. In practice, I''ve never had that happen. # If it''s ever a problem, you could use # yield result # Then this function would become a generator. You lose the ability to access # results by index or slice them or whatever, but you retain # the ability to iterate on them. ret.append(result) result = fetch_assoc(command) return ret # Ditch this line if you choose to use a generator.

Ahora, con esa función auxiliar definida, puede hacer algo como obtener la información de todas las tablas en su base de datos con lo siguiente:

from ibm_db import tables t = results(tables(connection))

Si desea ver todo en una tabla determinada, puede hacer algo como esto ahora:

from ibm_db import exec_immediate sql = ''LIST * FROM '' + t[170][''TABLE_NAME''] # Using our list of tables t from before... rows = results(exec_immediate(connection, sql))

Y ahora las rows contienen una list de filas de la tabla 170 en su base de datos, donde cada fila contiene un dict de nombre de columna: valor.

Espero que todo esto ayude.


Puede conectarse a db2 desde python usando jaydeapi. Primero instale la biblioteca ejecutando pip instale jaydeapi descargue db2jcc4.jar Luego puede conectarse usando el siguiente código: pasando el nombre de host, portno, userid, nombre de la base de datos de contraseñas

import jaydebeapi conn_src = jaydebeapi.connect( ''com.ibm.db2.jcc.DB2Driver'', [''YourHostName:PortNo/DatabaseName'',''userid'',''password''],''C:/db2jcc4.jar'' ) cursor=conn_src.cursor() sql = ''Select * from schemaname.TableName fetch first 100 rows only '' cursor.execute(sql) print("fetchall:") result = cursor.fetchall() for r in result: print(r)


Puede utilizar la biblioteca ibm_db para conectarse a DB2.

query_str = "SELECT COUNT(*) FROM table_name" conn = ibm_db.pconnect("dsn=write","usrname","secret") query_stmt = ibm_db.prepare(conn, query_str) ibm_db.execute(query_stmt)