2017-03-08 6 views
0

Ich erstelle eine Tabelle, um Daten zu einer Datenbank hinzuzufügen, aber ich bin nicht sicher, wo die Spalte für 'E-Mails' erstellt werden soll. Mein letztes Ziel ist es, einen Benutzernamen (E-Mail) und ein Passwort eingeben zu können und in einer Datenbank zu speichern, aber ich bin mir nicht sicher, wie ich das machen soll. Hier ist mein Code zur Zeit:"Keine solche Spalte" beim Suchen nach Tabellenspalte

import sqlite3 

def save_to_database(my_stack, filename = 'stack_database.db'): 

    conn = sqlite3.connect(filename) 
    c = conn.cursor() 

    for row in c.execute('SELECT email FROM sqlite_master WHERE type="table"'): 
     if row != None: 
      c.execute("DROP TABLE emails") 

    c.execute("CREATE TABLE emails(email text,login_date text)") 
    ... 
+2

Das ist wirklich schwer zu lesen; Der Einzug wird im ersten Codeblock durcheinander gebracht. Könnten Sie bitte a) den Code auf den reduzieren, der Ihrer Meinung nach relevant ist (alle 'print'-Anweisungen nicht) und b) einen Stack-Trace enthalten, so dass wir tatsächlich sehen können, welche Zeile den Fehler verursacht? Mit anderen Worten, ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) – roganjosh

Antwort

1

Die sqlite_master Tabelle keine Spalte email genannt hat; Die gesamte Tabellenstruktur ist im Text in der Spalte sql enthalten.

Sie könnten nach dem Tabellennamen selbst suchen (aber beachten Sie, dass, wenn keine Zeile gefunden wird, keine Zeile zurückgegeben wird, nicht einmal eine leere, so dass es keinen Sinn ergibt, dies mit einer for-Schleife zu behandeln):

c.execute("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'emails'") 
if not c.fetchall(): 
    c.execute('DROP TABLE emails') 

Allerdings gibt es eine einfachere Methode, um sicherzustellen, dass eine Tabelle entfernt wird, und zwar unabhängig von dem vorherigen Zustand:

c.execute('DROP TABLE IF EXISTS emails') 
Verwandte Themen