Zur Zeit bin ich dabei einen alten php Prototypen vernünftig als Microservice zu implementieren. Dabei schaue ich mir ein paar unterschiedliche Methoden an, wie man auf eine MySQL Datenbank zugreifen kann. Die erste möchte ich heute in diesem Artikel vorstellen.
Für die ersten Testen habe ich ganz einfach angefangen. In Python gibt es dafür das Paket mysql-connector. Installieren kann man das Paket einfach mit pip.
1 | pip install mysql-connector |
Erste Datenbankabfrage
Als erstes müssen wir das Paket im Skript importieren. Anschließend muss eine Datenbank Verbindung aufgebaut werden. Das ganze sieht bei mir dann so aus:
1 2 3 4 5 6 7 8 9 10 | from mysql.connector import connect cnx =connect( host="192.168.10.24", port="3307", user="camping", password="Password123!", database="camping" ) |
Nachdem wir ein Objekt haben, mit dem wir uns gegen die Datenbank verbinden können, müssen wir nun noch eine Abfrage an die Datenbank schicken. Dafür erstellt man als erste einen Cursor und ruft diesen anschließend mit execute auf.
Execute braucht dafür ein Select Statemant.
In der nächsten Zeile werden mittels cursor.description die Spaltennamen der Tabelle in der Variablen row_headers gespeichert.
Mit fetchall() wird das im cursor hinterlegte Statement ausgeführt. Das Ergebnis speichere ich in der results Variable.
1 2 3 4 5 6 7 | cursor = cnx.cursor(buffered=True) cursor.execute('SELECT * from campground') row_headers=[x[0] for x in cursor.description] results = cursor.fetchall() |
Der Rest ist nun standard Python Code, indem wir die Werte aus der Datenbank in ein JSON Format umwandeln.
1 2 3 4 5 6 | json_data=[] for result in results: json_data.append(dict(zip(row_headers,result))) data = json.dumps(json_data,use_decimal=True) |
Eigene Datenbankklasse für ein kleines Projekt
Ich habe mal eine kleine Python Klasse angefangen, die schon ein paar Abfragefunktionen enthält. Es ist noch nicht viel, aber ich will es hier troztdem mal teilen um zu zeigen, wie man ein eine solche Klasse anfangen kann.
Konfigurationsparameter sind hier in ein yaml Datei ausgelagert, um diese später ohne manuelle Änderung in der Klasse konfigurieren zu können.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import yaml import simplejson as json from mysql.connector import connect class Database: def __init__(self,db): yaml_file = open('config.yaml', 'r') cfg = yaml.load(yaml_file,Loader=yaml.Loader) self.cnx = connect( host=cfg['host'], port=cfg['port'], user=cfg['user'], password=cfg['password'], database=db ) def get_db_entries_by_list(self,table, list): columns = ','.join(list) query = 'SELECT {} from {}'.format(columns,table) print('query: {}'.format(query)) cursor = self.cnx.cursor(buffered=True) cursor.execute(query) row_headers = [x[0] for x in cursor.description] results = cursor.fetchall() json_data = [] for result in results: json_data.append(dict(zip(row_headers, result))) data = json.dumps(json_data, use_decimal=True, ensure_ascii=False) return data def get_all_db_entries(self,table): result = self.get_db_entries_by_list(table,['*']) return result |
Ich denke es ist ein guter Einstiegspunkt für die Entwicklung einer eigenen kleinen Datenbank Klasse in Python. Gebt mir gerne mal Feedback ob ihr gerne mehr solche Code Snippets sehen möchtet.
Schreibe einen Kommentar