【问题标题】:Why the database is not refreshing after delete?为什么删除后数据库不刷新?
【发布时间】:2017-01-27 13:48:00
【问题描述】:

在数据库中我有两个事件:

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

【问题讨论】:

  • 看起来交易有问题。尝试手动执行“提交”或将隔离级别更改为无。

标签: python json flask sqlite


【解决方案1】:

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

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

小心,您创建了一个格式化的 SQL 字符串而不转义参数(SQL 注入警报)。使用游标执行替换变量。

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

每当您将某些内容替换为 SQL 查询时就这样做!

【讨论】:

  • 是的,在我提交问题后,我发现了问题。不过谢谢
  • 还有一个问题:如何重新初始化数据字典?就像我在 deletefromDB 函数中执行 data = {} 一样,什么也没有发生
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多