So schreiben Sie Code für den Zugriff auf Python dashDB auf Bluemix oder lokal

Nach Hinweise zum Zugriff auf dashDB von Python folgt ein Hinweis zur Codeentwicklung, die als CF-App für Local und Bluemix ausgeführt wird.

Lesen Sie den Beispielcode IBM-Bluemix / Get-Started-Python (1) der CloudFoundry-App von Bluemix (im Folgenden als BMX-CFA bezeichnet). Dann stellte ich fest, dass der Code auf zwei Fällen basierte, einer lokal und der andere auf Bluemix. Berücksichtigen Sie daher beim Schreiben dieses Codes den Code für den Zugriff auf dashDB.

Und ein Beispielcode für den Zugriff auf dashDB von Python [dashDB und Python] (https://hub.jazz.net/project/ibmdatabase/dashDB/overview#https://hub.jazz.net/git/ibmdatabase%252FdashDB/list/master/samples/dashDBPython) (2) dient als Referenz Es gibt viele Probleme, die gelöst werden müssen, und es gibt nutzlosen Code, einschließlich doppelten Codes. Daher ist er nicht sehr hilfreich. Deshalb habe ich beschlossen, anspruchsvollen Code zu erstellen, während ich seitwärts schaue.

Das diesem Artikel entsprechende GitHub-Repository lautet https://github.com/takara9/python-dashDB. Installationsanweisungen finden Sie unter README.md unter dieser URL.

Verwenden Sie den dashDB-Dienst in der lokalen Umgebung und in Bluemix

Um die Funktionsweise des Basisprogramms zu überprüfen, erstellen wir routinemäßig Snippet-Code, überlegen, wie er geschrieben werden soll, und integrieren ihn in das Hauptprogramm. Um jedoch ein Snippet auf Bluemix zu schreiben und den Vorgang zu überprüfen, muss bx cf push wiederholt und das Protokoll vom Webbildschirm aus überprüft werden, was einen um ein Vielfaches höheren Aufwand erfordert. Aus diesem Grund kann es idealerweise in den frühen Phasen der Entwicklung und Wartung lokal ausgeführt werden, und der Dienst kann über die PaaS-Infrastruktur von Bluemix ausgeführt werden.

In der Betriebsumgebung von BMX-CFA werden als Verbindungsmethode für den mit der Laufzeitumgebung des Programms verknüpften Dienst die Zugriffsdaten usw. in der Umgebungsvariablen VCAP_SERVICES festgelegt und an das Programm übergeben. Bei der Ausführung in der BMX-CFA-Umgebung können Sie auf die Umgebungsvariablen verweisen. Bei der Ausführung in der lokalen Umgebung müssen Sie jedoch die JSON-Datei usw. lesen, um die Dienstanmeldeinformationen abzurufen.

Die Bluemix-CLI verfügt über Befehle zum Abrufen von Dienstanmeldeinformationen. Daher empfiehlt es sich, diese zu verwenden. Der folgende Befehl zeigt eine Liste der Namen der Dienstanmeldeinformationen an, die in einer Instanz von dasDB definiert sind. Der in doppelte Anführungszeichen eingeschlossene Teil ist der Instanzname von dashDB.

bx cf service-keys "dashDB for Analytics-iq"

Sie können die Informationen im JSON-Format abrufen, indem Sie mit dem folgenden Befehl aus der Liste auswählen. Der letzte Parameter, Anmeldeinformationen-1, ist der Name der Dienstanmeldeinformationen, die mit dem obigen Befehl erhalten wurden.

bx cf service-key "dashDB for Analytics-iq" Credentials-1

Der folgende Code ist ein Snippet, das die erforderlichen Informationen aus der Umgebungsvariablen VCAP_SERVICES und einer JSON-formatierten Datei festlegt. Wenn dieser Code ausgeführt wird, werden die Dienstanmeldeinformationen von dashDB in Creds festgelegt. Informationen, die verschiedenen Zugriffsmethoden entsprechen, werden bereitgestellt, aber die letzte Zeile, ssldsn, wird auf die Zeichenfolge gesetzt, die durch die verschlüsselte Kommunikation an den ODBC-Treiber verbunden werden soll.

    creds = None
 #Set from Umgebungsvariable
    if 'VCAP_SERVICES' in os.environ:
	vcap = json.loads(os.getenv('VCAP_SERVICES'))
	print('Found VCAP_SERVICES')
	if 'dashDB' in vcap:
            creds = vcap['dashDB'][0]['credentials']
 #Set aus lokaler Datei
    elif os.path.isfile('vcap-local.json'):
	with open('vcap-local.json') as f:
            print('Found local VCAP_SERVICES')
            vcap = json.load(f)
            creds = vcap['services']['dashDB'][0]['credentials']
 # Verschlüsselte Kommunikationszeichenfolge
    url = creds["ssldsn"]

Stellen Sie eine Verbindung zu dashDB her, indem Sie die Funktion des ODBC-Treibers (3) ibm_db mit der Variablen url aufrufen.

    conn = ibm_db.connect(url, '', '')

Portnummer in lokaler Umgebung und Bluemix

In der BMX-CFA-Ausführungsumgebung gibt PaaS die Portnummer an, die die App verwenden kann. Diese Portnummer wird auch als Laufzeitumgebungsvariable verwendet, um die zum Zeitpunkt der Bereitstellung dynamisch zugewiesene Portnummer zu übermitteln. Wenn Sie andererseits in einer lokalen Umgebung ausgeführt werden, kennen Sie die Portnummern, die von der Selbstverwaltung verwendet werden können, und weisen Sie sie manuell zu. Die folgenden Ausschnitte gelten für beide.

    port = int(os.getenv('PORT', 8080))
    app.run(host='0.0.0.0', port=port, debug=True)

Python Flask Framework

Diese App verwendet Flask, um den Webbildschirm anzuzeigen. Flask ist ein leichtes Webanwendungsframework für die Programmiersprache Python. Er nennt sich "Mikroframework", weil dadurch die standardmäßig bereitgestellte Funktionalität auf ein Minimum beschränkt wird. Es basiert auf dem Werkzeug WSGI Toolkit und der Jinja2 Template Engine. Es wird unter einer BSD-Lizenz veröffentlicht. (6), (5)

Ein Beispiel für die kleinste App (5) wird unten vorgestellt und erläutert. Im Folgenden wird die Zeichenfolge "Hallo Welt!" Zurückgegeben, wenn darauf zugegriffen wird. hello_world () wird zurückgerufen, wenn die Route mit @ app.route ('/') GET ist.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!\n'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9080, debug=True)

Der Webserver wird einfach über die Befehlszeile gestartet.

ubuntu@ubuntu-xenial:~/dashDB$ python test7.py
 * Running on http://0.0.0.0:9080/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger pin code: 195-308-734

Ich laufe mit dem Befehl curl als Client.

buntu@ubuntu-xenial:~/dashDB/python-dashDB$ curl http://localhost:9080/
Hello, World!

Der Code in dieser App löst ein HTTP-GET aus, um hello () zurückzurufen und ODBC den Zugriff auf dashDB zu ermöglichen.

# Rückruf beim Zugriff
@app.route('/')
def hello():
    conn = ibm_db.connect(url, '', '')
    stmt = ibm_db.prepare(conn, 'SELECT RACE_CODE, RACE_DESC from SAMPLES.RACE_CODE FETCH FIRST 5 ROWS ONLY')
    ibm_db.execute(stmt)

Ergebnis der App-Ausführung

Dies ist das Ausführungsergebnis nach der Bereitstellung auf Bluemix. スクリーンショット 2017-06-03 16.15.07.png

Dateigruppenbeschreibung

bx cf push Die vorherigen Ordner und Dateien sind unten für eine Beschreibung aufgeführt.

ubuntu@ubuntu-xenial:~/dashDB$ tree python-dashDB
python-dashDB/
├── LICENSE
├── main.py
├── manifest.yml
├── Procfile
├── README.md
├── requirements.txt
└── vcap-local.json

Lesen Sie zur Bereitstellungszeit die Datei manifest.yml, um Ressourcen für die Bluemix ClooudFoundry-Laufzeit zu reservieren, installieren Sie das Paket in der Datei "resources.txt" und führen Sie den Befehl "Procfile" aus, um die App zu starten.

Referenz (7) kann helfen, die Elemente im Manifest zu erklären. Eine Beschreibung des Procfile finden Sie in Referenz (8).

Zusammenfassung

Bluemix ist kein Konzept für die Entwicklung nur in einer PaaS-Umgebung, sondern unterstützt den Betrieb sowohl in der lokalen Entwicklungsumgebung als auch in der CF-Anwendung, effizient mit Tools, die Entwicklern vertraut sind, und überlässt den problematischen Serverbetrieb PaaS Auf diese Weise möchten wir Entwicklern die glücklichste Umgebung bieten. Ich habe das verstanden.

Referenzmaterial

(1) IBM-Bluemix/get-started-python https://github.com/IBM-Bluemix/get-started-python (2) dashDB and Python https://hub.jazz.net/project/ibmdatabase/dashDB/overview#https://hub.jazz.net/git/ibmdatabase%252FdashDB/list/master/samples/dashDBPython (3) Python DBI driver for DB2 (LUW, zOS, i5) and IDS https://pypi.python.org/pypi/ibm_db/2.0.7 (4) Python Packaging User Guide https://packaging.python.org/ (5) Flask Home page http://flask.pocoo.org/ (6) Wikipedia Flask https://ja.wikipedia.org/wiki/Flask (7) Application manifestn https://console.ng.bluemix.net/docs/manageapps/depapps.html#appmanifest (8) CloudFoundry Application about Procfile https://docs.cloudfoundry.org/buildpacks/prod-server.html#procfile

Recommended Posts

So schreiben Sie Code für den Zugriff auf Python dashDB auf Bluemix oder lokal
So greifen Sie über Python auf Wikipedia zu
Hinweise zum Schreiben von require.txt
Qiita (1) Wie schreibe ich einen Codenamen?
Wie man pydoc auf Python Interpreter liest
[Kivy] So installieren Sie Kivy unter Windows [Python]
So erstellen Sie einfach eine Umgebung, in der Python-Code auf Jupyter ausgeführt werden kann, ohne die lokale Umgebung zu verschmutzen
So schreiben Sie Python-Dokumentkommentare (Docstrings)
So löschen Sie Python 2.x auf einem Mac.
Memorandum über die Verwendung von Gremlin Python
Zugriff auf RDS von Lambda (Python)
Wie schreibe ich Ruby to_s in Python
Versuchen Sie, Python-Code zu schreiben, um Go-Code zu generieren. - Versuchen Sie, JSON-to-Go usw. zu portieren
So schreiben Sie einen Komponententest für den URL-Abruf in GAE / P.
[Version 2020] So installieren Sie Python3 auf EC2 von AWS
Strategie zur Monetarisierung mit Python Java
So installieren Sie OpenCV auf Jetson Nano Python
Verwendung von Python Kivy ④ ~ Ausführung unter Android ~
So führen Sie MeCab unter Ubuntu 18.04 LTS Python aus
So schreiben Sie in Error Repoting in Python auf GAE
[Python] So installieren Sie OpenCV unter Anaconda [Windows]
[Go] So schreiben oder rufen Sie eine Funktion auf
So schreiben Sie Umgebungsvariablen, die Sie nicht in [GitHub] Python einfügen möchten
Ich möchte in Python schreiben! (1) Überprüfung des Codeformats
20. Offline-Echtzeit So schreiben Sie Probleme in Python
Überlegen Sie, wie Sie Python auf Ihrem iPad programmieren können
So installieren Sie Python
So schreiben Sie in Python die Verkettung von Zeichenfolgen in mehrere Zeilen
So messen Sie die Verarbeitungszeit mit Python oder Java
Schreiben Sie Python2-Code in Python3 um (2to3)
Yum-Befehl zum Zugriff auf MySQL mit Python 3 unter Linux
So installieren Sie Python
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
So erstellen Sie eine Django (Python) -Umgebung auf Docker
So erstellen Sie ein Python-Paket mit VS Code
[Python] So schreiben Sie eine Dokumentzeichenfolge, die PEP8 entspricht
Verwendung von Django mit Google App Engine / Python
Schreiben Sie Code in UnitTest, eine Python-Webanwendung
Wie man Python auf Android genießt !! Programmieren für unterwegs !!
So erstellen Sie eine Python-Umgebung unter Amazon Linux 2
[Einführung in Python] So schreiben Sie sich wiederholende Anweisungen mit for-Anweisungen
"Cython" -Tutorial, das Python explosiv macht: Wenn C ++ - Code von der Bibliothek abhängt. Schreiben Sie setup.py.
[Python / Ruby] Mit Code verstehen Wie man Daten aus dem Internet abruft und in CSV schreibt
Verwalten der Python-Nebenversion (Erstellen einer virtuellen Umgebung) unter Windows (ohne Pyenv oder WSL)
So installieren Sie Python2.7 python3.5 mit pyenv (unter RHEL5 CentOS5) (2016 Nov)
[Einführung in Python] Wie man bedingte Verzweigungen mit if-Anweisungen schreibt
Offline-Echtzeit zum Schreiben eines E14 Python-Implementierungsbeispiels
So erstellen Sie eine neue virtuelle Python-Umgebung unter Ubuntu
[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
Verliere nicht gegen Ruby! Wie man Python (Django) auf Heroku ausführt
Verwendung von VS-Code in einer venv-Umgebung mit Windows
[Ev3dev] So zeigen Sie ein BMP-Bild mit Python auf dem LCD an
[Python] Wie schreibe ich eine if-Anweisung in einen Satz?
So stellen Sie Pybot, das einfachste Python-Lehrbuch, auf Heroku bereit
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
Wie kann doi nützlich sein, wenn man fragt, wie man Code schreibt?
[ROS] So schreiben Sie Publisher und Subscriber auf einen Knoten