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.
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, '', '')
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)
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)
Dies ist das Ausführungsergebnis nach der Bereitstellung auf Bluemix.
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).
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.
(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