web-dev-qa-db-fra.com

Comment connecter python à db2

Y a-t-il un moyen to connect python to DB2?

22
Rohita Khatiwada

La documentation est difficile à trouver et une fois que vous l'avez trouvée, c'est plutôt abominable. Voici ce que j'ai trouvé au cours des 3 dernières heures.

Vous devez installer ibm_db en utilisant pip, comme suit:

pip install ibm_db

Vous voudrez créer un objet de connexion. La documentation est ici.

Voici ce que j'ai écrit:

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>;', '', '')

Ensuite, vous devriez savoir que les commandes de ibm_db ne vous donnent jamais de résultats. Au lieu de cela, vous devez appeler l'une des méthodes fetch de la commande, à plusieurs reprises, pour obtenir les résultats. J'ai écrit cette fonction d'aide pour faire face à cela.

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.

Maintenant, avec cette fonction d'assistance définie, vous pouvez facilement obtenir quelque chose comme obtenir les informations sur toutes les tables de votre base de données avec les éléments suivants:

from ibm_db import tables

t = results(tables(connection))

Si vous souhaitez tout voir dans un tableau donné, vous pouvez faire quelque chose comme ceci maintenant:

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))

Et maintenant, rows contient une list de lignes de la 170e table de votre base de données, chaque ligne contenant une dict de nom de colonne: valeur.

J'espère que tout cela aide.

13
ArtOfWarfare

ibm-db, le pilote officiel DB2 pour Python et Django est ici:

Voici un tutoriel récent sur la procédure à suivre pour tout installer sur Ubuntu Linux:

Je devrais mentionner qu'il y avait plusieurs anciens pilotes DB2 non officiels pour Python. ibm-db est celui que vous devriez utiliser.

9
Leons

Après de nombreuses recherches, j'ai découvert comment se connecter à DB2 avec ibm_db.

Tout d’abord, si vous utilisez une version python supérieure à 3.2, utilisez 

pip installer ibm_db == 2.0.8a

la version 2.0.8 (la plus récente) ne pourra pas s'installer.

puis utilisez ce qui suit pour vous connecter

import ibm_db_dbi as db

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

liste des tables avec 

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

et exécuter SQL avec 

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

vérifier ce lien pour une documentation officielle pas aussi précise

4
prof1990

Vous pouvez vous connecter à db2 à partir de python à l'aide de jaydeapi Première bibliothèque d'installation exécutant pip install jaydeapidownload db2jcc4.jar Ensuite, vous pouvez vous connecter à l'aide du code ci-dessous: .__ en transmettant hostname, portno, userid, password prénom 

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)
2
Rohit

En plus de @ prof1990 response :

Depuis la version 2.0.9 (16 août 2018), avec Python 3, vous pouvez simplement utiliser:

pip install ibm_db

Référence:

https://github.com/ibmdb/python-ibmdb#updated-ibm_db

Exemple de connexion ici :

import ibm_db
ibm_db.connect("DATABASE=<dbname>;HOSTNAME=<Host>;PORT=<60000>;PROTOCOL=TCPIP;UID=<username>;PWD=<password>;", "", "")

Documentation complète de l'API ici:

https://github.com/ibmdb/python-ibmdb/wiki/APIs

1
matkap

Vous pouvez utiliser la bibliothèque ibm_db pour connecter 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)
0
jatin

Ceci est pour référence future:

Documents d'installation officiels dire: 

Python 2.5 ou version ultérieure, à l'exclusion de Python 3.X.

pip install ibm_db

Cela n'a fonctionné que sur Python 2.7 pour moi; cela n'a pas été le cas pour 3.X. De plus, je devais faire Python 2.7 par défaut (au lieu de Python 3) pour que l'installation fonctionne (sinon, il y aurait des erreurs d'installation).

Exemple d'utilisation de la documentation officielle

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