Erstelle deinen eigenen Preisvergleich für Games in Python Teil 2

Im ersten Teil, sind wir bereits darauf eingegangen, wie du dir Python 3 installierst, einen Docker-Datenbank-Container via „docker-compose“ erstellst und wir haben „pipenv“ mit pip3 installiert. Im zweiten Teil dieser Reihe beschäftigen wir uns mit der Einrichtung des virtuellen Python-Environments und der Verbindung zur Datenbank.

Hier findest du den vorherigen und folgenden Teil der Reihe:

Update (21.07.19, 13:30 Uhr): Beim Test der Verbindung, stand fälschlicherweise print(error.message) in der Exception, das gibt es natürlich nicht. Der Code-Ausschnitt wurde dahingehend angepasst.

Wir müssen nun ein Python 3 Projekt erstellen. Das kannst du mit diesem Befehl erledigen.

# Python 3 Projekt mit pipenv anlegen
pipenv --three

Damit wir uns innerhalb des Projekts bewegen können, müssen wir die virtuelle Umgebung mit diesem Befehl betreten.

# Python 3 virtual Environment betreten
pipenv shell

Wenn alles geklappt hat, sollte nun in Klammern vor der Eingabezeile im Terminal der Name der Python-Umgebung stehen.

Aufgabe der Shell nach Betreten des virtuellen Environments.
Aufgabe der Shell nach Betreten des virtuellen Environments.

Paketinstallation

Als nächstes müssen wir zwei Pakete installieren, psycopg2-binary und sqlalchemy. Psycopg2 (http://initd.org/psycopg/) ist das Python-Modul welches wir für die Kommunikation zwischen Python und der Datenbank benötigen. Zudem unterstützt das Modul die gesamte Python DB API 2.0 und sollte dich damit keine Kompromisse eingehen lassen müssen. Sqlalchemy (https://www.sqlalchemy.org) ist ein SQL-Toolkit für Python und bietet die Möglichkeit der Objektrelationalen Abbildung (engl. Object Relational Mapper (ORM)). Das bedeutet du wirst mit der Datenbank mittels Klassen und Funktionen innerhalb von Python interagieren und du musst nur in Ausnahmefällen echten SQL-Code schreiben (müssen).
In der pipenv-Shell werden Pakete nicht wie im nativen Python via pip installiert, sondern mit pipenv selbst.

# Installation von psycopg2
pipenv install psycopg2-binary

# Installation von SqlAlchemy
pipenv install sqlalchemy

Wenn alles funktioniert hat, sollte es in deinem Terminal oder der Konsole ungefähr so aussehen.

Ausgabe der Shell nach Installation der beiden Pakete sqlalchemy und psycopg2.
Ausgabe der Shell nach Installation der beiden Pakete sqlalchemy und psycopg2.

Datebankstruktur

Nun, da wir die beiden Pakete installiert haben, sollten wir uns einen Kopf über die Struktur unsere Datenbank machen.

Theoretischer Aufbau der Datenbank mit dem Tabellen game, price, shop und platform.
Theoretischer Aufbau der Datenbank.

Wir werden vier Tabellen verwenden: game, price, shop und platform. Zwischen den Tabellen game und shop und game und platform existiert eine sogenannte One-To-Many-Beziehung. Also ein Shop, oder eine Plattform kann beliebig viele Spiele beinhalten. Wichtig ist hier die Unterscheidung pro Shop, da natürlich jedes Spiel in mindestens einem Shop gelistet ist. Andersherum verhält es sich da bei der Tabelle price und game, hier herrscht eine Many-To-One-Beziehung. Also hat jedes Spiel beliebig viele Preise. Natürlich könnten wir auch einfach den Preis in die Tabelle game mit aufnehmen, jedoch haben wir durch die externe Tabelle die Möglichkeit, eine Historie aufzubauen. Wenn das für dich nicht interessant ist, kannst du die Tabelle price gerne weglassen und price als Attribut in der Tabelle game aufnehmen. Das wäre es fürs Erste mit der Theorie.

Der erste (Python)-Code

Lege nun in deinem Verzeichnis den Ordner „base“ an, in diesem werden wir unseren Python-Code erstellen. Öffne diesen Ordner via Terminal.

# Erstellen des Ordners "base"
mkdir base

# Betreten des Ordners "base"
cd base

Jetzt müssen wir unseren Editor, Entwicklungsumgebung etc. öffnen. Ich werde Visual Studio Code (https://code.visualstudio.com) verwenden. Bei der Installation solltest du darauf achten, dass du VSCode dem PATH hinzufügst. Bei macOS solltest du diesen Weg verwenden, um Code dem PATH hinzuzufügen: https://code.visualstudio.com/docs/setup/mac

Damit der Editor auch die Pakete in der virtuellen Python Umgebung erkennt, solltest du ihn wie folgt starten.

# Starten des Editors mit einbeziehung der pipenv-Pakete
pipenv run code .
# code steht dabei für den Namen deines Editors im PATH

Erstelle nun die Datei „base.py“ und füge folgenden Code ein.

#!/bin/python3
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

username = "baleon"
password = "StarkesPasswort"
psqlhost = "localhost"
hostport = "5432"
database = "preisvergleich_db"


db_engine = create_engine(
f'postgresql://{username}:{password}@{psqlhost}:{hostport}/{database}'
)
Session = sessionmaker(bind=db_engine)
Base = declarative_base()

Da ich dir jetzt nicht jede Zeile einzeln erklären möchte, hier eine kurze erklärung, was es mit dem Code auf sich hat. Zunächst werden die benötigten Module importiert. Anschließend werden Variablen erstellt, die du mit den Werten füllen kannst, die du auch beim Erstellen des Docker-Containers angegeben hast. Dann wird eine Verbindung mit dem Postgresql-Docker-Container hergestellt (Beachte die Änderung in Teil 1 bei der docker-compose-Datei). Danach wird die Verbindung mit der „Session-Verwaltung“ verbunden. Zuletzt wird eine Basisklasse erstellt, welche wir zur Erstellung der (Python-)Klassen verwenden werden. Damit werden wir via SqlAlchemy die Tabellen erstellen.

Testen der Verbindung

Damit du testen kannst, ob die Verbindung funktioniert, füge deinem Code noch diese Zeile hinzu.

try:
    Base.metadata.create_all(db_engine)
    print("working!!!")
except Exception as error:
    print(error)

Anschließend kannst du dein Script mit folgendem Befehl im Terminal bzw. der Konsole ausführen.

# Ausführen der Python-Datei base.py
python base.py

Wenn du als Ausgabe „Working!!!“ erhältst, super! Wenn nicht, wird dir eine detailierte Fehlermeldung abgezeigt, die dir helfen sollte, dein Problem zu lösen. Solltest du hier nicht weiter kommen, schreib mir gerne in die Kommentare, dann können wir versuchen, dass Problem gemeinsam zu lösen. Bis demnächst!

Quellen

Werbeanzeigen

1 Kommentar zu „Erstelle deinen eigenen Preisvergleich für Games in Python Teil 2“

  1. Pingback: BALEON Erstelle deinen eigenen Preisvergleich für Games in Python Teil 3

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.