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)
ibm-db, el controlador oficial de DB2 para Python y Django está aquí:
Aquí hay un tutorial reciente sobre cómo instalar todo en Ubuntu Linux:
Debo mencionar que había varios controladores de DB2 no oficiales más antiguos para Python. ibm-db es el que debes usar.