[PYTHON] Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen

Lange Zeit (ungefähr 3 Monate) habe ich "SQL-Skript ausführen" der IBM Client-Lösung verwendet, um SQL auszugeben und Daten zu erfassen. Da die Anzahl der Daten jedoch 5000 überstieg, wollte ich alle Daten erfassen. Da es mühsam wurde, endlos zu scrollen, versuchte ich ein Batch-Erfassungsexperiment mit Python und ODBC.

Da es sich um einen experimentellen Code handelt, werden die Fehlerprüfung und das Ausgabeergebnisformat ignoriert.

Experimentierumgebung

PC-Umgebung

Verbindungszielumgebung

Vorbereitung

Holen Sie sich Python

Holen Sie sich den neuesten Stabilisator von python.org und installieren Sie ihn. Legen Sie nach der Installation den Pfad in den Ordner mit "python.exe".

Holen Sie sich pypyodbc

Der Grund, warum ich pypyodbc anstelle des allgemeinen pyodbc gewählt habe, ist, dass die Installation mit pip fehlgeschlagen ist. Ich habe auch IBMs empfohlene ibm_db ausprobiert, aber diesmal ist es ein Pfad, da beide Microsoft Visual C ++ 14 benötigten.

Installieren Sie mit "pip" an Python.

pip install pypyodbc

Beziehen von IBM i Access Client-Lösungen

Ich habe es vor ein paar Monaten eingestellt, damit ich mich an den Inhalt erinnere. Gehen Sie zu https://www.ibm.com/support/pages/ibm-i-access-client-solutions. Folgen Sie dem Link "Downloads für IBM i Access Client-Lösungen". Sie werden unterwegs aufgefordert, Ihre IBM ID zu authentifizieren. Wenn Sie also eine ID haben, geben Sie diese ein, andernfalls registrieren Sie eine neue (kostenlos). Klicken Sie zum Herunterladen auf "ACS Windows App Pkg English (64bit)".

Da es im Installationsformat vorliegt, installieren Sie es gemäß dem Installationsverfahren.

Testcode

odbctest.py


import pypyodbc

#Verbindungsinformationen abrufen
config = {}
with open("connection_config.txt", 'r', encoding="utf-8") as conf:
    for line in conf.read().splitlines():
        key_, val_ = line.replace(" ", "").split("=")
        config[ key_ ] = val_

#DB-Verbindung
connection = pypyodbc.connect(
    driver='{iSeries Access ODBC Driver}',
    system = config["system"],
    uid = config["uid"],
    pwd = config["pwd"]                    )
cur = connection.cursor()

#SQL-Ausführung
statement = open("statement.sql", 'r', encoding="utf-8").read()
cur.execute( statement )
for row in cur:
    print( row )

Die Quelle ist grob in 3 Teile unterteilt.

"Verbindungsinformationen abrufen" ruft die Verbindungsinformationen aus einer externen Datei in die Datenbank ab und speichert sie im Wörterbuch. Die externe Datei "connection_config.txt" sieht folgendermaßen aus:

connection_config.txt


system = xxx.xxx.xxx.xxx
uid    = USER
pwd    = PASWORD

Bei "DB-Verbindung" wird anhand der gelesenen Verbindungsinformationen versucht, eine Verbindung zur Datenbank herzustellen und den Cursor abzurufen.

Bei "SQL-Ausführung" wird das in die externe Datei geschriebene SQL gelesen und an execute () des Cursors übergeben, um das SQL auszugeben. Die for-Schleife darunter wirft jede Zeile in die Funktion print () und schreibt sie in die Standardausgabe.

Ausführungsergebnis

statement.sql


select * from QSYS2.LIBLIST

Lassen Sie uns die obige SQL in Anweisung.sql schreiben und ausführen.

>python testodbc.py
(1, 'QSYS', 'QSYS', 'SYSTEM', 0, '\x0eäýäþämäwäáäÝäbäJäÝäÞäì\x0f')
(2, 'QSYS2', 'QSYS2', 'SYSTEM', 0, 'CPI\x0eá¶àªäýäþämäwäáäÝäbäJäÝäÞäì\x0f')
(3, 'QHLPSYS', 'QHLPSYS', 'SYSTEM', 0, None)
(4, 'QUSRSYS', 'QUSRSYS', 'SYSTEM', 0, 'S Mohe Hoote L Caine Ane Mo Kanane U Heone He')
(5, 'QIWS', 'QIWS', 'PRODUCT', 0, None)
(6, 'QGPL', 'QGPL', 'USER', 0, 'GENERAL PURPOSE LIBRARY')
(7, 'QTEMP', 'QTEMP', 'USER', 0, None)

Verstümmelte Charaktere sind beabsichtigt ... Die Beschriftungen einiger von IBM bereitgestellter Objekte scheinen nicht gut zu übersetzen. Wenn es sich jedoch um eine normal erstellte Tabelle handelt, verwenden Sie Japanisch, unabhängig davon, ob Sie SQL- oder AS / 400-spezifische Funktionen verwenden Konvertiert es in Zeichen, die problemlos gelesen werden können.

Wenn Sie zu einer Datei umleiten, sollten Zehntausende von Ergebnissen Sekunden bis Zehntelsekunden dauern. Obwohl dies von der Leistung des Servers abhängt, wurde der Schreibvorgang in ca. 5 Sekunden abgeschlossen (Ausgabedateigröße 1 MB), als ich versuchte, 15 Spalten x 10000 Datensätze und eine etwas größere Menge an SQL auszuführen.

Dies befreit Sie von den Strafen, wenn Sie die Seitentaste endlos gedrückt halten, um die vollständige Ergebnismenge zu erhalten.

Recommended Posts

Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe versucht, mit pypyodbc Preparation 1 schnell Daten von AS / 400 abzurufen
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
Ich habe versucht, mit AWS Lambda einen AMI zu erhalten
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Ich habe versucht, eine verdächtige Person mithilfe von Geolonia-Adressdaten schnell zu einem MAP zu machen
Ich möchte benutzerdefinierte Datenattribute von HTML als Elemente mit Python Selenium erhalten
Ich habe versucht, von Postman aus mit Cisco Guest Shell als API-Server zu arbeiten
Holen Sie sich Daten von Twitter mit Tweepy
Ich habe versucht, scRNA-seq-Daten mithilfe der topologischen Datenanalyse (TDA) zu analysieren.
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe versucht, mit Pandas eine Pferderenn-Datenbank zu erstellen
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, mit Boto3 eine Liste der AMI-Namen zu erhalten
Ich habe versucht, BigQuery-Daten mit Jupyter Lab mit GCP zu visualisieren
Ich habe versucht, Konversationsdaten von ASKfm zu kratzen
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Ich habe versucht, Text mit TensorFlow zu klassifizieren
Ich habe versucht, die selektive Suche als R-CNN zu verwenden
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Ich habe versucht, Headless Chrome von Selenium zu verwenden
[Data Science-Grundlagen] Ich habe versucht, mit Python von CSV auf MySQL zu speichern
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Ich habe versucht, eine Clusteranalyse von Kunden anhand von Kaufdaten durchzuführen
Ich habe versucht, durch Schaben ein Bild zu bekommen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich möchte mit Python eine E-Mail von Google Mail senden.
Ich habe versucht, mit OpenCV Bewegungen schnell zu erkennen
Ich habe versucht, WAV-Dateien mit Pydub zu synthetisieren.
So erhalten Sie Artikeldaten mithilfe der Qiita-API
Ich möchte die Daten von League of Legends ② erhalten
Ich möchte League of Legends-Daten erhalten ①
Python-Programmierung: Ich habe versucht, mithilfe von BeautifulSoup4 Unternehmensinformationen (Crawlen) von Yahoo Finance in den USA abzurufen
Ich habe DBM mit Pylearn 2 unter Verwendung künstlicher Daten ausprobiert
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, die multiple Regressionsanalyse anhand konkreter Beispiele so einfach wie möglich zu erklären.
Python-Programmierung: Ich habe versucht, Nachrichtenartikel mit Selenium und BeautifulSoup4 abzurufen (zu crawlen)
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht zu debuggen.
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden