2017-09-01 4 views
0

J'ai besoin d'automatiser quelques commandes IBM DB 2 via python via le pilote pyodbc. Je me suis connecté avec succès à la base de données par le pilote DB2 ODBC et peut exécuter les commandes SELECT, INSERT, CREATE TABLE. J'ai besoin d'exécuter des commandes telles que db2level, list node directory show detail, etc., qui font preuve exception comme suit:Impossible d'exécuter les commandes db2 à partir de pyodbc

pyodbc.ProgrammingError: ('42601', '[42601] [IBM][CLI Driver][DB2/LINUXX8664] SQL0104N An unexpected token "END-OF-STATEMENT" was found following "db2level". Expected tokens may include: "JOIN <joined_table>". SQLSTATE=42601\n (-104) (SQLExecDirectW)') 

Ceci est mon python code pyodbc:

import pyodbc 

cnx = pyodbc.connect(
    'Driver={DB2}; ' 
    'Hostname=192.168.0.185; ' 
    'Port=50005; ' 
    'Protocol=TCPIP; ' 
    'Database=ABC; ' 
    'CurrentSchema=db2inst8; ' 
    'UID=db2inst8; ' 
    'PWD=12345;' 
    ) 
cursor = cnx.cursor() 
cursor.execute("db2level") 
+0

'list node directory' est une commande DB2 CLP. Évidemment, vous ne pouvez pas exécuter via une interface SQL. – mustaccio

Répondre

1

le 'db2level' est un programme externe, ce n'est pas SQL, vous ne pouvez pas l'appeler via pyodbc. Vous pouvez appeler la commande db2level de la même manière que vous appelez une commande externe (tant qu'elle se trouve sur le même nom d'hôte).

Si vous souhaitez rechercher la version/le groupe de correctifs DB2 du serveur DB2 à l'aide de SQL, vous pouvez vous connecter à la base de données et utiliser les vues/fonctions fournies par db2 à cette fin. `Db2level` est un programme autonome;