2017-01-27 3 views
0

in der DB Ich habe zwei Ereignisse:Warum wird die Datenbank nach dem Löschen nicht aktualisiert?

{1: {'title': 'APPLE'}, 2: {'title': 'BANANA'}} 

, wie Sie unten sehen können, ich die deletefromDB Funktion mit dem Parameter des zweiten Ereignisses auf Refresh nennt, und ich bin die Daten auszudrucken (die json oben) . Mein Problem ist, dass sich die Daten erst ändern, wenn ich meinen Flaschenserver neu starte. Bis zu diesem Punkt ist es die gleiche json-Ausgabe. Kann jemand erklären, was ich falsch mache?

dies ist mein Code:

import sqlite3 
from flask import Flask, render_template, request 
app = Flask(__name__) 
data = {} 

conn = sqlite3.connect('events.db') 
cursor = conn.cursor() 

# INIT 
def initDB(): 
    with conn: 
     cursor.execute("SELECT * FROM Events") 
     rows = cursor.fetchall() 
     for row in rows: 
      temp = {} 
      temp["title"] = row[1] 
      data[row[0]] = temp 
     print(data) 
initDB() 

def deletefromDB(eventID): 
    query = 'DELETE FROM Events WHERE EventId = {}'.format(eventID) 
    with conn: 
     cursor.execute(query) 
    print(query) 
    initDB() 

@app.route('/') 
def index(): 
    deletefromDB(2) 
    return 'Index Page' 

if __name__ == "__main__": 
    app.run() 
+0

Sieht aus wie ein Problem mit Transaktionen. Versuchen Sie vielleicht manuell "commit" auszuführen oder ändern Sie isolation_level in None. – Maciek

Antwort

0

Sie Caching der Tabellen führen in die data dict auf Datenbankinitialisierung. Dann löschen Sie eine Zeile aus der Tabelle, ohne die Änderungen an der data dict zu übergeben. Entweder Sie laden Sie die gesamte data dict nach dem Löschen oder Sie entfernen Sie den Eintrag direkt von ihm:

def deletefromDB(eventID): 
    query = 'DELETE FROM Events WHERE EventId = {}'.format(eventID) 
    with conn: 
     cursor.execute(query) 
    del data[eventID] 
    print(query) 
    initDB() 

Seien Sie vorsichtig, Sie eine formatierte SQL-Zeichenfolge erstellen, ohne zu entkommen den Parameter (SQL-Injection-Alarm). Verwenden Sie den Cursor execute, um die Variablen zu ersetzen.

query = 'DELETE FROM Events WHERE EventId = %d' 
# ... 
cursor.execute(query, (eventID,)) 

Tun Sie es, wenn Sie etwas in eine SQL-Abfrage ersetzen!

+0

Ja, nachdem ich die Frage gestellt habe, habe ich das Problem gefunden. aber danke – gyula

+0

noch eine Frage: Wie reit init das dict dict? as Wenn ich data = {} in der Funktion deletefromDB mache, passiert nichts – gyula

+0

vielleicht könnte die Verwendung von 'data.clear()' hier funktionieren – keksnicoh

Verwandte Themen