Seite 1 von 1

Umgang mit INTEGER PRIMARY KEY AUTOINCREMENT, in SQLite

Verfasst: Freitag 17. Juli 2020, 07:19
von foto2004
Hallo Gemeinde,


ich habe da ein keines Problem an dem ich gerade nage.

ich versuche meine DB mit Datensätzen zu füllen und die Spalte id per Autoincrement zu durchnummerieren.

so wei so gut. Ich habe mich da anhand eines Tutorials entlang gehangelt und lt dieses Tutorials muss man die Spalte "id" die ja das Autoincrement hat nicht extra übergeben. Soweit ich mich zu erinnern glaube war das bei MySQL und PHP auch so.

Tja wenn ich das mache bekomme ich aber diese Fehlermeldung:

File "/Users/immanuelschade/Documents/PyQt/DB-Projekt/DBProjekt.py", line 91, in sqlEingabe
zeiger.execute("""
sqlite3.OperationalError: table personen has 6 columns but 5 values were supplied
Abort trap: 6

Code: Alles auswählen



def sqlEingabe():
    verbindung = sqlite3.connect("pers.db")
    zeiger = verbindung.cursor()
    sql_anweisung = """
    CREATE TABLE IF NOT EXISTS personen (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    vorname VARCHAR(20), 
    nachname VARCHAR(30), 
    geburtstag DATE,
    ref1 VARCHAR(30),
    knummer INTEGER
    );"""

    zeiger.execute(sql_anweisung)

    vorname    = eingabeWindow.lineEditVorname.text()
    nachname   = eingabeWindow.lineEditNachname.text()
    geburtstag = eingabeWindow.lineEditGeburt.text()
    ref1 = "t"
    knummer = 0

    zeiger.execute("""
                INSERT INTO personen 
                VALUES (?,?,?,?,?)
                """, 
                ( vorname, nachname, geburtstag, ref1, knummer)
                )
    
    verbindung.commit()
    verbindung.close()



wenn ich aber die "id" reinschreibe in die sql Anweisung so kommt das die "id" nicht definiert ist oder wenn ich sie definiere
dass es vom falschen Datentyp ist (id = '').

wo bitte ist mein Denkfehler?

Re: Umgang mit INTEGER PRIMARY KEY AUTOINCREMENT, in SQLite

Verfasst: Freitag 17. Juli 2020, 07:54
von Jankie
Du musst das so machen:


Code: Alles auswählen

zeiger.execute("INSERT INTO personen (vorname, nachname, geburtstag, ref1, knummer) VALUES (?,?,?,?,?)",(vorname, nachname, geburtstag, ref1, knummer))
Also die Spaltennamen angeben in die die Values geschrieben werden sollen.

Re: Umgang mit INTEGER PRIMARY KEY AUTOINCREMENT, in SQLite

Verfasst: Freitag 17. Juli 2020, 07:54
von Sirius3
Wenn Du nicht alle Felder bei INSERT angibst, mußt Du die Feldnamen explizit auflisten.
Benutze keine kryptischen Abkürzungen, wenn Du Referentenstatus meinst, dann nenn es nicht ref1 und wenn du Kotztütennummer meinst, dann nenn das auch kotztuetennummer.
Datenbanken werden einmal initialisiert und nicht jedesmal, wenn man einen Datensatz hinzufügen will.
Alles was eine Funktion braucht, muß sie über ihre Argumente bekommen, hier felt zumindest eingabeWindow. Wobei eine Mischung aus Englisch und Deutsch in einem Wort sollte man vermeiden. Variablennamen werden komplett klein geschrieben, wie Funktionen auch.

Re: Umgang mit INTEGER PRIMARY KEY AUTOINCREMENT, in SQLite

Verfasst: Freitag 17. Juli 2020, 09:33
von foto2004
Dankeschön genau das war es.

Ja ich weis meine Nehmen sind eigentlich nur mal so dahingeschrieben da ich das Ding nur für mich zum Lernen mache, also kein Projekt oder so und wenn ich mal wieder nachschauen erfreue ich mich an meinen (damals) komischen Namen aber ich kann dann meine Gedankengänge besser nachvollziehen, wird sich sicher im laufe der Zeit ändern.

Danke für eurer Bemühungen mich auf den rechten Weg zu bringen. Ich weiß dass ich oft ziemlich verdreht denke.