为什么删除后数据库没有刷新?

时间:2017-01-27 13:48:00

标签: python json flask sqlite

在数据库中

我有两个事件:

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

你可以看到,我在刷新时用第二个事件的参数调用deletefromDB函数,我打印出数据(上面的json)。我的问题是,只有在我重新启动烧瓶服务器之后,数据才会发生变化。直到这一点,它是相同的json输出。有人可以解释我做错了吗?

这是我的代码:

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()

1 个答案:

答案 0 :(得分:0)

您正在将表结果缓存到数据库初始化的data dict中。然后从表中删除一行而不将更改提交到data dict。您可以在删除后重新加载整个data dict,也可以直接从中删除该条目:

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

请注意,创建格式化的SQL字符串而不转义参数(SQL注入警报)。使用游标execute替换变量。

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

每当您将某些内容替换为SQL查询时,请执行此操作!