Tabellen erstelen


Daten einer Datenbank werden in Tabellen gespeichert. Die Zeilen enthalten Datensätze (records), die Informationsobjekte repräsentieren. Die Spalten enthalten die Eigenschaften (Attribute) dieser Objekte.



Datensätze
(records)




 
  Feldnamen (Attribute)
 
 id  name  vorname  wohnort  geschlecht  jahrgang
 1  Huber  Lia  Bern  w  2002
 2  Meier  Luca  Basel  m  2003
 3  Frech  Marc  Bern  m  2000
 4  Bauer  Paul  Luzern  m  2003
 5  Zwahlen  Noah  Thun  m  2002
 6  Meier  Nina  Biel  w  2001

In einer relationalen Datenbank, können die Daten auf mehrere Tabellen verteilt werden. Bevor man die erste Tabelle erzeugt, sollte man das Gesamtkonzept für alle Daten, die man speichern will, entwerfen.

Da dieses Tutorial für Anfänger bestimmt ist, beginnt es mit einem einfachen Beispiel. Wir erstellen zuerst nur eine Tabelle person, in der Name, Vorname, Wohnort, Geschlecht und Jahrgang einer Schuklasse gespeichert sind und erklären die wichtigsten Datenbankoperationen. Danach ergänzen wir die Datenbank mit einer zweiten Tabelle sport, welche die Leistungen in verschiedenen Disziplinen eines Sporttgs erfasst und zeigen, wie man Informationen aus zwei Tabellen, die in einer Beziehung zu einander stehen, herausfiltern kann.

Im dritten Beispiel wählen wir eine Anwendung, die ohne Datenbanken kaum realisierbar wäre. Wir zeigen, wie bei Twitter die Informationen über User, Follower und Tweets gespeichert werden können.

 

  SQLite Datenbank und eine Datenbank-Tabelle erstellen

with connect("demo.db") as con: öffnet eine Verbindung zu der SQLite-Datenbank demo und erzeugt ein Verbindungsobjekt con. Wenn die Datenbank demo noch nicht existiert, wird sie mit diesem Aufruf erstellt.

demo.db ist Name der Datenbank und gleichzeitig auch der Name der Datei, in der die Datenbank gespeichert wird. Ohne zusätzliche Pfadangabe wird die Datei demo.db im Unterverzeichnis \bin des TigerJython-Installationsverzeichnisses gespeichert. Sie können aber auch den vollständigen Pfad der Datei im gewünschten Verzeichnis angeben. Wenn Sie zum Beispiel für Ihre Datenbankdateien ein Verzeichnis c:\dbEx einrichten, wird die Dtei mit dem Befehl
with connect("c:\\dbEx\\demo.db") as con:
im Unterverzeichnis dbEx gespeichert. In den nachfolgenden Anwendunen können Sie die Daten wieder unter diesem Dateinamen holen.

Mit cursor = con.cursor() erzeugt man ein Cursor-Objekt. Üblicherweise wird ein Cursor zum Durchlaufen der Datensätze verwendet. In SQLite wird der Cursor auch verwendet, um SQL-Befehle auszuführen.

Eine Tabelle person wird mit dem Befehl CREATE TABLE person() erzeugt. In der Klammer wird die Tabellenstruktur festgelegt. Es muss entschieden werden, welche Felder notwendig sind, von welchen Typ die Feldeinträge sind (Text, ganze Zahlen, Dezimalzahlen...) und optional welche Länge die Felder aufweisen (Anzahl Zeichen). Texte werden in der Regel in Feldern vom Typ VARCHAR(n) gespeichert. Felder vom Typ INTEGER werden für ganzen Zahlen verwendet. Das Feld id enthält den Primärschlüssel dieser Tabelle. Dieser identifiziert jeden Datensatz eindeutig, im Unterschied zum Feld name, der mehrmals vorkommen kann (z.B. Meier). Die Schlüsselfelder sind insbesondere dann wichtig, wenn man mehrere Tabellen miteinander verknüpft.

Nach der Programmausführung sollten man im Unterverzeichnis \bin des TigerJython-Installationsverzeichnisses die Datei demo.db sehen.


# CreateTablePerson.py

from sqlite3 import *

with connect("demo.db") as con:
    cursor = con.cursor()
    cursor.execute("""CREATE TABLE person
                  (id INTEGER PRIMARY KEY, 
                  name VARCHAR(30), 
                  vorname VARCHAR(30), 
                  wohnort VARCHAR(30),
                  geschlecht CHAR(1),  
                  jahrgang INTEGER)""")       
print("Done")
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Erklärungen zum Programmcode:

from sqlite3 import * importiert das Python-Modul sqlite3
with connect("demo.db") as con: Alle Datenbankoperationen werden in einem with connect - Block durchgeführt. Nach Ablauf dieses Blocks wird die Verbindung zur Datenbank automatisch beendet und die Datenbank geschlossen (auch wenn im Python-Programm ein Fehler aufgetreten ist und das Programm nicht bis zum Ende läuft)
"""CREATE TABLE ....""": Der SQL-Befehl wird in einem Python-Programm in einem String eingegeben. Mit dreifachen Anführungszeichen kann ein String uber mehrere Zeilen verteilt werden um die Übersichtlichkeit zu verbessern
cursor.execute(): der SQL-Befehl wird ausgeführt

 

  Tabelle mit DROP TABLE löschen

Wenn man das Programm CreateTablePerson.py noch einmal ausführen will, muss man die bestehende Tabelle person vorher löschen, sonst erhält man eine Fehlermeldung. Vorsicht! Wenn man das Programm DropTablePerson.py ausfüht, wird die Tabelle person endgültig gelöscht, die Datenbank demo bleibt aber erhalten. Da die Tabelle zur Zeit noch keine Datensätze enthält, ist es kein Problem.

# DropTablePerson.py

from sqlite3 import *

print("Drop table")
with connect("demo.db") as con:
    cursor = con.cursor()
    cursor.execute("DROP TABLE person")    
print("Done")
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Erklärungen zum Programmcode:

cursor.execute("DROP TABLE person") löscht die Tabelle person.