Seite 1 von 1

OperationalError "no such table: vocabulary"

Verfasst: Dienstag 7. April 2009, 13:51
von Trubinial Guru
Hallo Alle,

ich bin neu hier im Forum und habe ein kleines Problem. Undzwar bin ich Anfänger in der Python Programmierung und will durch das programmieren eines Vokabel-Programms meine Kenntnisse erweitern.
Leider bin ich schon ziehmlich am Anfang hängen geblieben: Ich will zum einen eine Datenbank mit der Tabelle vocabulary und zum anderen Daten in die Datenbank schreiben.
Der Code zum erstellen der Datenbank:

Code: Alles auswählen

# -*- coding: utf-8 -*-

import sqlite3 
def new_table():
    connection = sqlite3.connect("vocabulary1.db")

    cursor = connection.cursor()
    connection.commit()

    cursor.execute("""CREATE TABLE vocabulary (frontside TEXT, backside TEXT, date INTEGER, layer INTEGER )""")
    
    new_table()
Und der Code zum füllen der Datenbank:

Code: Alles auswählen

# -*- coding: utf-8 -*-

def new_vok(frontside,  backside,  date):
    import sqlite3 
    con = sqlite3.connect('vocabulary1.db')
    cursor = con.cursor()
    con.commit()

    [color=red]cursor.execute("""INSERT INTO vocabulary VALUES ('go', 'gehen', 2, 1)""")[/color] 
In der letzten Zeile kommt die Meldung "OperationalError"no such table: vocabulary"". Ich habe schon alles mögliche probiert aber schaffe es nicht, da ich nicht verstehe weshalb es die Tabelle nicht geben sollte.

Ich hoffe mir kann jemand weiterhelfen!

MfG Jonny

Verfasst: Dienstag 7. April 2009, 14:25
von EyDu
In "new_table" fehlen am Ende ein commit und ein close.

Das commit in new_vok gehört hinter das execute. Allgemein sieht die Funktion etwas seltsam aus, da du sqlite in jedem Aufruf importierst und jedes mal eine neue Datenbankverbindung aufbaust.

Verfasst: Dienstag 7. April 2009, 15:14
von Trubinial Guru
Hmmm Danke EyDu für deine schnelle Antwort, leider hat es nicht geklappt ---> gleiche Fehlermeldung. Ach ja und der code sieht so ... aus, weil ich aus verzweiflung alles möglicge ausprobiert hab. Wenns funktioniert werd ich nochma bisle "aufräumen".

Hat noch jemand ne Idee?

Liebe Grüße

Verfasst: Dienstag 7. April 2009, 15:32
von Hyperion
Bist Du Dir auch sicher, dass die Tabelle wirklich angelegt wurde? Prüf das doch einfach mit einer SQLite-Shell aus, wie z.B. dieser hier:
http://code.google.com/p/sqlite-manager/

Einfach zu installieren, falls Du nen Firefox auf Deinem System hast.

Wenn dem nicht so ist, leg die Tabelle doch einfach erst einmal mit dem Manager an und prüfe, ob Du überhaupt etwas reinschreiben kannst.

Wenn das dann klappt, kümmerst Du Dich noch einmal um das Anlegen. (Wobei dort das commit() auch hinter das execute gehört ...)

Verfasst: Mittwoch 8. April 2009, 13:34
von Trubinial Guru
Also laut dem Manager wurde keine Tabelle angelegt. Lustiger Weise zeigt er die gleiche Fehlermeldung an, wenn ich die Tabelle mit dem Manager erstelle -> "no such table: vocabulary"

Ich bin echt verwirrt...

Verfasst: Mittwoch 8. April 2009, 13:41
von Hyperion
Kannst Du denn eine neue Datenbank anlegen und in dieser dann über den Manager eine Tabelle erstellen?

Und dann per Python auf diese DB lesend zugreifen?

Mach doch erst einmal so weiter. Evtl. ist Das Anlegen deiner DB irgend wie schon schief gelaufen!

Verfasst: Mittwoch 8. April 2009, 14:01
von gerold
Hallo Jonny!

Willkommen im Python-Forum! :-)

Probiere doch mal diesen Code aus http://www.python-forum.de/topic-11615.html und lies dir die Kommentare genau durch. Vielleicht findest du dich dann etwas besser mit SQLite zurecht.

mfg
Gerold
:-)

Geschafft!!

Verfasst: Donnerstag 9. April 2009, 00:06
von Trubinial Guru
Vielen Dank Gerold!
Ich habe mir deinen Code genau angeguckt und einen ähnlichen für meine Zwecke erstellt. Es funktioniert, War übriegens sehr schön erklärt und übersichtlich! Danke für die schnelle Hilfe an alle!

Mfg Jonny

Verfasst: Samstag 11. April 2009, 09:24
von sma
Noch ein Tipp: Gewöhne dich von Anfang an daran, die Werte für INSERT usw. immer als Parameter und nie direkt anzugeben. Das vermeidet Probleme mit Werten, die besondere Zeichen enthalten und im Falle von Webanwendungen die gerade bei PHP so beliebten SQL-Injection-Fehler.

Code: Alles auswählen

con = sqlite3.connect('/tmp/vocabulary1.db') 
cursor = con.cursor() 
cursor.execute("INSERT INTO vocabulary VALUES (?, ?, ?, ?)", ['go', 'gehen', 2, 1]);
cursor.close()
con.commit()
con.close()
Stefan

Re: OperationalError "no such table: vocabulary"

Verfasst: Donnerstag 23. August 2012, 15:10
von N2Ndesign
Probiere doch mal diesen Code aus http://www.python-forum.de/topic-11615.html und lies dir die Kommentare genau durch. Vielleicht findest du dich dann etwas besser mit SQLite zurecht.
404 :(

Ich hab grad dasselbe Problem, gibt es vergleichbare Threads oder Sites?

Danke!

Grüße

Re: OperationalError "no such table: vocabulary"

Verfasst: Donnerstag 23. August 2012, 21:08
von Hyperion
Du musst den Link anpassen: http://www.python-forum.de/viewtopic.php?t=11615

Einfach mal bei so etwas gucken, wie die aktuelle URL so aussieht und dann "einsetzen" ;-)