我有两个事件:
{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()
答案 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查询时,请执行此操作!