Ich bin momentan an einer Onlineshop-Anwendung dran. Ich möchte dort Artikel einfügen, löschen, und verändern können.
Ich habe 2 Probleme. Erstmal mein Code:
Code: Alles auswählen
import sqlite3
import os
import sys
from helper_functions import menupunkt_ausführen
class Artikel:
def __init__(self, Artikelnummer, ArtikelName, AnzahlVorrat, Preis):
self.Artikelnummer = Artikelnummer
self.ArtikelName = ArtikelName
self.AnzahlVorrat = AnzahlVorrat
self.Preis = Preis
self.properties = (Artikelnummer, ArtikelName, AnzahlVorrat, Preis)
class OnlineShop:
def __init__(self, create=False):
self.db_path = 'onlineshop.db'
self.connect(create)
def NeuerArtikel(self):
self.Artikelnummer = int(input("Geben sie die Artikelnummer ein: "))
self.ArtikelName = input("Geben sie den Artikelnamen ein: ")
self.AnzahlVorrat = int(input("Geben sie den vorrätigen Lagerbestand ein: "))
self.Preis = int(input("Geben sie den Preis ein: "))
self.properties = (Artikelnummer, ArtikelName, AnzahlVorrat, Preis)
def ArtikelHinzufügen(self, liste):
for e in liste:
self.cursor.execute('insert into onlineshop values(?,?,?,?)',e)
self.db.commit()
def connect(self, create=False):
if os.path.exists(self.db_path):
self.db = sqlite3.connect(self.db_path)
self.cursor = self.db.cursor()
else:
if create:
self.db = sqlite3.connect(self.db_path)
self.cursor = self.db.cursor()
self.create_db()
else:
print("\nSQLite Datenbank File\n\n" +
"-- {0} --\n\nexistiert nicht.\n".format(self.db_path) +
"Zum Neuanlegen dieses Programm mit Argument " +
"'create' aufrufen!\n\n"
"=> Anwendung wird beendet!")
sys.exit(1)
def create_db(self):
self.cursor.execute('drop table if exists onlineshop')
self.cursor.execute('create table onlineshop ('
'Artikelnummer INT PRIMARY KEY UNIQUE NOT NULL,'
'ArtikelName TEXT NOT NULL,'
'AnzahlVorrat INT NOT NULL,'
'Preis REAL NOT NULL)')
self.db.commit()
if __name__ == "__main__":
db_create = False
artikel_liste = []
if len(sys.argv) > 1:
if sys.argv[1] == 'create':
db_create = True
shop = OnlineShop(db_create)
artikel = Artikel(1, "Deutschland Fahne", 375, 9.99)
artikel_liste.append(artikel.properties)
shop.ArtikelHinzufügen(artikel_liste)
shop.cursor.execute('select * from onlineshop')
for row in self.cursor: print(row)
Ich bekomme beim Ausführen folgende Fehlermeldung:
So wie ich das verstehe will der jedesmal den Artikel hinzufügen, da die Artikelnummer aber unique sein muss kommt der fehler.Traceback (most recent call last):
File "./Online_shop.py", line 82, in <module>
shop.ArtikelHinzufügen(artikel_liste)
File "./Online_shop.py", line 31, in ArtikelHinzufügen
self.cursor.execute('insert into onlineshop values(?,?,?,?)',e)
sqlite3.IntegrityError: column Artikelnummer is not unique
1. Frage:
Wie kann ich das umgehen?
2. Frage:
Ich möchte 3 verschiedene Methoden schreiben mit denen man einen Artikel ändern, löschen und hinzufügen kann. Ich will mit einem Dictionary arbeiten sprich das alle Daten der Artikel in das Dictionary geschrieben werden.
Vielen Dank