From f7e845cb166dd29635b57ef42182c9489c72b491 Mon Sep 17 00:00:00 2001 From: Sebastian <94404394+SeZett@users.noreply.github.com> Date: Wed, 2 Aug 2023 20:30:13 +0200 Subject: [PATCH] How to update data in StagingDB on K8 Cluster --- ...02_How_to_write_to_MongoDB_StagingDB.ipynb | 316 ++++++++++++++++++ Jupyter/mongoDB/configurationFH.py | 5 + 2 files changed, 321 insertions(+) create mode 100644 Jupyter/mongoDB/02_How_to_write_to_MongoDB_StagingDB.ipynb create mode 100644 Jupyter/mongoDB/configurationFH.py diff --git a/Jupyter/mongoDB/02_How_to_write_to_MongoDB_StagingDB.ipynb b/Jupyter/mongoDB/02_How_to_write_to_MongoDB_StagingDB.ipynb new file mode 100644 index 0000000..daac017 --- /dev/null +++ b/Jupyter/mongoDB/02_How_to_write_to_MongoDB_StagingDB.ipynb @@ -0,0 +1,316 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "3730fd2c", + "metadata": {}, + "outputs": [], + "source": [ + "import configurationFH as conf #hier wird die Configuration für das K8 cluster verwendet\n", + "import aki_prj23_transparenzregister.utils.mongo as mongo" + ] + }, + { + "cell_type": "markdown", + "id": "305f2cc1", + "metadata": {}, + "source": [ + "Für die ersten Experimente zum Lesen und Schreiben von Daten, bieten sich die Tutorials von PyMongo an:\n", + "\n", + "https://pymongo.readthedocs.io/en/stable/tutorial.html" + ] + }, + { + "cell_type": "markdown", + "id": "e7c41906", + "metadata": {}, + "source": [ + "# Erstellen eines Connection-Objekts\n", + "## utils.mongo.MongoConnection\n", + "Dem Connection Object werden die Credentials und Name der Datenbank übergeben, um ein Verbindungsobjekt zu erzeugen." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "efecf29d", + "metadata": {}, + "outputs": [], + "source": [ + "#Create Connection-Object\n", + "MongoObject=mongo.MongoConnection(conf.HOSTNAME,conf.DATABASE,conf.PORT,conf.USERNAME,conf.PASSWORD)" + ] + }, + { + "cell_type": "markdown", + "id": "6975afde", + "metadata": {}, + "source": [ + "# Verbindungsherstellung\n", + "## utils.mongo.MongoConnector\n", + "Das erzeugte Objekt stellt mit der pymongo-Bilbiothek eine Verbindung zur Datenbank her." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e755c39b", + "metadata": {}, + "outputs": [], + "source": [ + "#create Connection\n", + "MongoConnect=mongo.MongoConnector(MongoObject)" + ] + }, + { + "cell_type": "markdown", + "id": "97d3ef0c", + "metadata": {}, + "source": [ + "# Erzeuge eine Collection-Instanz\n", + "Jede Mongo Datenbank kann mehrere Collections beinhalten. Um auf diese unabhängigen Collections zuzugreifen, muss eine Instanz erstellt werden." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "34e19d26", + "metadata": {}, + "outputs": [], + "source": [ + "#create Object for news-collection\n", + "CollNews=MongoConnect.database[\"news\"]" + ] + }, + { + "cell_type": "markdown", + "id": "ed7a99f7", + "metadata": {}, + "source": [ + "# Auslesen der Newsartikel\n", + "\n", + "Mit der find()-Methode wird eine Anfrage an die Datenbank gesendet, welche alle Dokumente der gewählten Collection zurückgibt.\n", + "Der cursor verweist somit auf das erste Element der Collection.\n", + "Mit der find-Methode können auch einzelne Elemente der Collection gefunden werden, die definierte Attribute erfüllen.\n", + "\n", + "Der Code führt eine Abfrage in der MongoDB-Sammlung \"news\" durch, erhält die Ergebnisse in einem Cursor und wandelt den Cursor dann in eine Python-Liste um, um auf die Daten einfacher zugreifen zu können. Die Liste NewsList enthält nun alle Dokumente aus der \"news\"-Sammlung als Python-Listenobjekte. Jedes Element in der Liste entspricht einem Dokument aus der Datenbank." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "495d5448", + "metadata": {}, + "outputs": [], + "source": [ + "#get all documents from collection\n", + "cursor=CollNews.find({})\n", + "NewsList=list(cursor)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "192c5199", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "918" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(NewsList)" + ] + }, + { + "cell_type": "markdown", + "id": "3de93755", + "metadata": {}, + "source": [ + "# Auswählen eines Artikels" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "4978218a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'_id': 'tagesschau_90fb6340-abc5-40bb-85c3-3cfd98aa795a',\n", + " 'title': 'GDL kündigt neue Streiks an',\n", + " 'date': '2023-06-28T16:46:37.324+02:00',\n", + " 'text': ' Die Deutsche Bahn soll wieder bestreikt werden. Die Lokführergewerkschaft GDL hat neue Arbeitskämpfe angekündigt, nachdem die Tarifverhandlungen mit der Bahn gescheitert waren. Ab Freitag könnten die Arbeitsniederlegungen beginnen. Die Lokführergewerkschaft GDL hat erneute Streiks bei der Deutschen Bahn angekündigt. Zum genauen Zeitpunkt und Dauer machte GDL-Chef Claus Weselsky noch keine Angaben. Er teilte lediglich mit, dass am Mittwoch und Donnerstag nicht gestreikt werde. Die GDL werde den Streik \"rechtzeitig ankündigen\". Vor der Entscheidung der GDL-Spitzengremien für die Wiederaufnahme von\\xa0Streiks hatte Weselsky von rund 100 Stunden Arbeitskampf gesprochen. Das wären mehr als vier Tage. Die GDL hatte im Herbst bereits sechs Mal bundesweit zu Arbeitsniederlegungen aufgerufen und damit den Bahnverkehr stark eingeschränkt. Die\\xa0GDL warf der Bahn vor der Streik-Entscheidung vor, in der laufenden Tarifrunde auf Zeit zu spielen. Der Konzern habe in der jüngsten Runde am 11. Februar zuvor gemachte Zusagen zurückgenommen. Die Bahn habe die Chance, den Arbeitskampf noch abzuwenden, wenn sie ein Positionspapier der GDL doch noch unterzeichne, so Weselsky. Das bundeseigene Unternehmen hatte zuvor eine Unterschrift unter das Dokument abgelehnt. Damit erfüllte sie ein von der GDL gesetztes Ultimatum nicht. In dem Papier sind Grundpositionen der Gewerkschaft festgeschrieben. Aus Sicht der Bahn enthält es aber nicht den Sachstand, sondern Maximalforderungen der GDL. \"Es gibt keinerlei Veranlassung, der Verhandlungsstand ist eigentlich so, dass wir zu Ergebnissen kommen könnten\", sagte Bahn-Personalvorstand Ulrich Weber. \"Von daher halte ich diese angekündigten Streiks für unverhältnismäßig.\" Da sich die GDL noch nicht auf einen Termin und eine Dauer festgelegt hat, habe er die Hoffnung, den Arbeitskampf in Gesprächen mit der Gewerkschaft noch abwenden zu können. Neben verkürzten Arbeitszeiten und fünf Prozent mehr Geld verlangt die GDL auch für ihre Mitglieder außerhalb der Lokführer-Berufsgruppe eigenständige Tarifverträge. Diese waren bislang von der konkurrierenden DGB-Gewerkschaft\\xa0EVG ausgehandelt worden. Die Bahn will nach eigenem Bekunden in den parallel geführten Verhandlungen unterschiedliche Regelungen für ein und dieselbe Berufsgruppe verhindern. Die Eisenbahn- und Verkehrsgewerkschaft (EVG) will ebenfalls voneinander abweichende Tarifverträge vermeiden. Dieses Thema im Programm: v',\n", + " 'source_url': 'https://www.tagesschau.de/wirtschaft/gdl-bahn-streik-105.html',\n", + " 'company': '[Deutsche Bahn, GDL]'}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "NewsList[212]" + ] + }, + { + "cell_type": "markdown", + "id": "0ccba849", + "metadata": {}, + "source": [ + "# Erweitern des JSONS" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "9904c9c3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'_id': 'tagesschau_90fb6340-abc5-40bb-85c3-3cfd98aa795a', 'title': 'GDL kündigt neue Streiks an', 'date': '2023-06-28T16:46:37.324+02:00', 'text': ' Die Deutsche Bahn soll wieder bestreikt werden. Die Lokführergewerkschaft GDL hat neue Arbeitskämpfe angekündigt, nachdem die Tarifverhandlungen mit der Bahn gescheitert waren. Ab Freitag könnten die Arbeitsniederlegungen beginnen. Die Lokführergewerkschaft GDL hat erneute Streiks bei der Deutschen Bahn angekündigt. Zum genauen Zeitpunkt und Dauer machte GDL-Chef Claus Weselsky noch keine Angaben. Er teilte lediglich mit, dass am Mittwoch und Donnerstag nicht gestreikt werde. Die GDL werde den Streik \"rechtzeitig ankündigen\". Vor der Entscheidung der GDL-Spitzengremien für die Wiederaufnahme von\\xa0Streiks hatte Weselsky von rund 100 Stunden Arbeitskampf gesprochen. Das wären mehr als vier Tage. Die GDL hatte im Herbst bereits sechs Mal bundesweit zu Arbeitsniederlegungen aufgerufen und damit den Bahnverkehr stark eingeschränkt. Die\\xa0GDL warf der Bahn vor der Streik-Entscheidung vor, in der laufenden Tarifrunde auf Zeit zu spielen. Der Konzern habe in der jüngsten Runde am 11. Februar zuvor gemachte Zusagen zurückgenommen. Die Bahn habe die Chance, den Arbeitskampf noch abzuwenden, wenn sie ein Positionspapier der GDL doch noch unterzeichne, so Weselsky. Das bundeseigene Unternehmen hatte zuvor eine Unterschrift unter das Dokument abgelehnt. Damit erfüllte sie ein von der GDL gesetztes Ultimatum nicht. In dem Papier sind Grundpositionen der Gewerkschaft festgeschrieben. Aus Sicht der Bahn enthält es aber nicht den Sachstand, sondern Maximalforderungen der GDL. \"Es gibt keinerlei Veranlassung, der Verhandlungsstand ist eigentlich so, dass wir zu Ergebnissen kommen könnten\", sagte Bahn-Personalvorstand Ulrich Weber. \"Von daher halte ich diese angekündigten Streiks für unverhältnismäßig.\" Da sich die GDL noch nicht auf einen Termin und eine Dauer festgelegt hat, habe er die Hoffnung, den Arbeitskampf in Gesprächen mit der Gewerkschaft noch abwenden zu können. Neben verkürzten Arbeitszeiten und fünf Prozent mehr Geld verlangt die GDL auch für ihre Mitglieder außerhalb der Lokführer-Berufsgruppe eigenständige Tarifverträge. Diese waren bislang von der konkurrierenden DGB-Gewerkschaft\\xa0EVG ausgehandelt worden. Die Bahn will nach eigenem Bekunden in den parallel geführten Verhandlungen unterschiedliche Regelungen für ein und dieselbe Berufsgruppe verhindern. Die Eisenbahn- und Verkehrsgewerkschaft (EVG) will ebenfalls voneinander abweichende Tarifverträge vermeiden. Dieses Thema im Programm: v', 'source_url': 'https://www.tagesschau.de/wirtschaft/gdl-bahn-streik-105.html', 'company': '[Deutsche Bahn, GDL]'}\n" + ] + } + ], + "source": [ + "import json\n", + "\n", + "# select the news article\n", + "data=NewsList[212]\n", + "jsonID=data['_id']\n", + "\n", + "#add the new attribute \n", + "data['company'] = '[Deutsche Bahn, GDL]'\n", + "\n", + "print(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "4eef3942", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'tagesschau_90fb6340-abc5-40bb-85c3-3cfd98aa795a'" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jsonID" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0752a77a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "CollNews.update_one(\n", + " {\"_id\": data[\"_id\"]},\n", + " {\"$set\": data},\n", + " upsert=True # Setze upsert=True, um das Dokument einzufügen, falls es noch nicht existiert\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "dae4966a", + "metadata": {}, + "outputs": [], + "source": [ + "#get all documents from collection\n", + "cursor=CollNews.find({})\n", + "NewsList=list(cursor)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "0412f2f8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'_id': 'tagesschau_90fb6340-abc5-40bb-85c3-3cfd98aa795a',\n", + " 'title': 'GDL kündigt neue Streiks an',\n", + " 'date': '2023-06-28T16:46:37.324+02:00',\n", + " 'text': ' Die Deutsche Bahn soll wieder bestreikt werden. Die Lokführergewerkschaft GDL hat neue Arbeitskämpfe angekündigt, nachdem die Tarifverhandlungen mit der Bahn gescheitert waren. Ab Freitag könnten die Arbeitsniederlegungen beginnen. Die Lokführergewerkschaft GDL hat erneute Streiks bei der Deutschen Bahn angekündigt. Zum genauen Zeitpunkt und Dauer machte GDL-Chef Claus Weselsky noch keine Angaben. Er teilte lediglich mit, dass am Mittwoch und Donnerstag nicht gestreikt werde. Die GDL werde den Streik \"rechtzeitig ankündigen\". Vor der Entscheidung der GDL-Spitzengremien für die Wiederaufnahme von\\xa0Streiks hatte Weselsky von rund 100 Stunden Arbeitskampf gesprochen. Das wären mehr als vier Tage. Die GDL hatte im Herbst bereits sechs Mal bundesweit zu Arbeitsniederlegungen aufgerufen und damit den Bahnverkehr stark eingeschränkt. Die\\xa0GDL warf der Bahn vor der Streik-Entscheidung vor, in der laufenden Tarifrunde auf Zeit zu spielen. Der Konzern habe in der jüngsten Runde am 11. Februar zuvor gemachte Zusagen zurückgenommen. Die Bahn habe die Chance, den Arbeitskampf noch abzuwenden, wenn sie ein Positionspapier der GDL doch noch unterzeichne, so Weselsky. Das bundeseigene Unternehmen hatte zuvor eine Unterschrift unter das Dokument abgelehnt. Damit erfüllte sie ein von der GDL gesetztes Ultimatum nicht. In dem Papier sind Grundpositionen der Gewerkschaft festgeschrieben. Aus Sicht der Bahn enthält es aber nicht den Sachstand, sondern Maximalforderungen der GDL. \"Es gibt keinerlei Veranlassung, der Verhandlungsstand ist eigentlich so, dass wir zu Ergebnissen kommen könnten\", sagte Bahn-Personalvorstand Ulrich Weber. \"Von daher halte ich diese angekündigten Streiks für unverhältnismäßig.\" Da sich die GDL noch nicht auf einen Termin und eine Dauer festgelegt hat, habe er die Hoffnung, den Arbeitskampf in Gesprächen mit der Gewerkschaft noch abwenden zu können. Neben verkürzten Arbeitszeiten und fünf Prozent mehr Geld verlangt die GDL auch für ihre Mitglieder außerhalb der Lokführer-Berufsgruppe eigenständige Tarifverträge. Diese waren bislang von der konkurrierenden DGB-Gewerkschaft\\xa0EVG ausgehandelt worden. Die Bahn will nach eigenem Bekunden in den parallel geführten Verhandlungen unterschiedliche Regelungen für ein und dieselbe Berufsgruppe verhindern. Die Eisenbahn- und Verkehrsgewerkschaft (EVG) will ebenfalls voneinander abweichende Tarifverträge vermeiden. Dieses Thema im Programm: v',\n", + " 'source_url': 'https://www.tagesschau.de/wirtschaft/gdl-bahn-streik-105.html',\n", + " 'company': '[Deutsche Bahn, GDL]'}" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "NewsList[212]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "426cdc6a", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Jupyter/mongoDB/configurationFH.py b/Jupyter/mongoDB/configurationFH.py new file mode 100644 index 0000000..49493ec --- /dev/null +++ b/Jupyter/mongoDB/configurationFH.py @@ -0,0 +1,5 @@ +HOSTNAME="172.17.38.210" +DATABASE="transparenzregister" +PORT=30217 +USERNAME="root" +PASSWORD="secret_password" \ No newline at end of file