677
24.8
Lösungen
24.8 Lösungen
Lösung 1
Abb. 24.10: ER-Diagramme (ohne Attribute)
(n)eu (l)öschen (E)nde
Wahl: l
Name: Tom Specht
Tom Specht wurde aus der Datenbank entfernt.
Liste der Redakteure:
Melanie Beck
Michael Klein
-----------------------------
(n)eu (l)öschen (E)nde
Wahl: e
Auf Wiedersehen ...
Person
verheitratet
Student
besucht
Seminar
Dozent
leitet
Angestellter
arbeitet in
Abteilung
leitet
1
1
a)
b)
n
1
m
n
n
1
1
c)
1
Kapitel 24
Datenbanken
678
Lösung 2
Skript:
# adminloesung2.py
import sqlite3,hashlib
class Admin(object):
def __init__(self, db_pfad):
self.verbindung = sqlite3.connect(db_pfad)
self.c = self.verbindung.cursor()
try:
self.c.execute("SELECT * FROM person")
self.c.execute("SELECT * FROM beitrag")
except:
# Tabellen existieren noch nicht
self.c.execute("""CREATE TABLE
person(name VARCHAR(50),
f ing e r p rin t BIN A R Y(1 6 ))
" " " )
self.c.execute("""CREATE TABLE
beitrag(titel VARCHAR(100),
t ext V A RCH A R (10 0 0 ),
v erf a l l sda t um F L O AT,
a uto r V ARC H A R(5 0 ) )
" " " )
self.verbindung.commit()
self.__runMenue()
def __runMenue(self):
wahl = " "
while wahl not in "eE":
self.c.execute("SELECT * FROM person")
print("Liste der Redakteure:")
for zeile in self.c: print(zeile[0])
print("-----------------------------")
print("(n)eu (l)öschen (E)nde")
wahl = input ("Wahl: ")
if wahl in "nN": self.__neuerRedakteur()
elif wahl in "lL": self.__redakteurLoeschen()
print("Auf Wiedersehen...")
self.c.close()
self.verbindung.close()
679
24.8
Lösungen
Erläuterung:
In der letzten Zeile wird ein anonymes Objekt der zuvor definierten Klasse
Admin instanzi-
iert. Als Argumente wird der Pfad der Datenbank-Datei übergeben. Die Klasse enthält (pri-
vate) Methoden für das Menü sowie das Einrichten und Löschen von Redakteuren.
def __neuerRedakteur(self):
neu = input("Neuer Redakteur: ")
if list(self.c.execute("""SELECT *
FRO M p ers o n
WHE R E nam e = ?; " "",
(ne u , ))) :
print('Name existiert bereits.')
e l s e :
m = hashlib.md5(neu.encode("utf-8"))
self.c.execute("""INSERT INTO person
V ALU E S (?, ? ) ;"" " ,
( neu , m .di g e st( ) ) )
self.verbindung.commit()
def __redakteurLoeschen(self):
name = input('Name: ')
t r y :
self.c.execute("""DELETE FROM person
WHERE name = ?;""", (name,))
print(name, "wurde aus der Datenbank entfernt.")
except:
print(name, "existiert nicht in der Datenbank.")
self.verbindung.commit()
Admin('redaktion.db')

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.