猿问

插入表中的 Python SQLite 数据消失了?

所以这让我很困惑,标题并没有真正正确地解释它。我有一个网页,当用户从下拉列表中选择时,会对由flask 处理的 url 进行 AJAX 调用。它首先发出对 的调用/teamSelected,我的 Python 会在其中抓取有关这两支球队之间足球比赛的一些信息,将其放入相应命名的表中并返回。

在此之后,第二个 AJAX 调用/requestCommentary在 python 中的位置进行,然后从表中检索此数据并返回它。


问题:

当我第一次调用 时/teamSelected,我有代码可以删除表(如果它存在)。之后我检查表是否存在(看起来很奇怪,但每次调用时删除表只是我确保if输入程序的一部分,以便我可以测试所有内容是否在那里工作)。之后,如果表不存在,则进入该if部分,在该部分创建表、抓取数据并将其存储在表中。如果我然后尝试打印表格的内容,它会完美地将它们吐出来,尽管告诉我只存在 1 行?

但是,如果我在删除表的开头删除代码,然后尝试打印内容,它不会打印任何内容。


对我来说,这毫无意义。如果表不存在,我创建它,用数据填充它,我可以访问它。但是,如果我注释掉 drop table 语句,下一次调用该表存在并且不会被删除,所以我应该能够访问它,但是那里不再有数据。如果我猜的话,几乎就好像该表只为该调用创建,然后在该调用中销毁它,因此后续调用无法访问它?


/teamSelected -抓取数据,添加到数据库


@app.route("/teamSelected", methods=['POST', 'GET'])

    def new():

        try:

            connection = sqlite3.connect("commentary.db")

            cursor = connection.cursor()

        except:

            print("COULD NOT CONNECT TO DATABASE")            


        data = request.get_data() #gets data passed via AJAX call

        splitData = data.decode().replace("\"", "").split("__") #data contains different elements split up by "__"

        homeTeam = splitData[0]

        awayTeam = splitData[1]

        tableName = homeTeam + awayTeam + splitData[2] #unique table name


        cursor.execute("DROP TABLE if exists "+tableName) #drops table to ensure enters if statement

        cursor.execute("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='"+tableName+"';")

        result = cursor.fetchone()

        number_of_rows = result[0]


回顾一下,意外行为:

  • 如果首先删除数据,然后添加数据,则仅从表中检索数据

  • 如果表已存在于先前添加数据的调用中,则新调用不检索数据

  • Number_of_rows 插入数据后打印 1(可能与打印 5 相关)

  • 单独的路由/RequestCommentary不能访问表无论如何

  • 没有抛出异常

真的可以帮助解决这个问题,因为我完全被这里的问题难住了,并且已经解决了几个小时。

经过更多测试,我确定这与正在创建的表的范围有关。我不确定如何或为什么,但我似乎只能访问我在该调用中添加到表中的数据,从以前的调用中添加的任何数据都不存在,这让我觉得表数据以某种方式是本地的调用访问它,而不是全局的?


慕丝7291255
浏览 383回答 1
1回答

慕娘9325324

只是设法弄清楚了。我知道这与使本地更改不被全球看到有关。环顾四周后,我意识到如果我不使用connection.commit()来保存所做的更改,这正是我会遇到的问题。我现在已经添加了它,所做的更改现在可以被所有调用看到并且工作正常。
随时随地看视频慕课网APP

相关分类

Python
我要回答