(Python Cmd)在不重新启动应用程序的情况下不会发生 sqlite3 提交

问题描述 投票:0回答:1

我遇到了 sqlite3 和 python cmd 库的问题。 我正在制作一个简单的 shell 应用程序,以使用 sqlite3 从数据库生成热身练习的随机样本。 这是完整的代码,因为它相当短:

import cmd
import sqlite3
from random import randint, sample

# Connect database & create cursor
db = sqlite3.connect('warmupsdb')
cursor = db.cursor()

# Get every exercise in the database
warmupsdb = cursor.execute("SELECT * FROM warmups").fetchall()

# Get the length of the database for error checking
warmupslen = len(warmupsdb)



class warmups(cmd.Cmd):
    intro = "Hello World !"
    prompt = "warmups > "
    """Simple cmd program."""

    def do_gen (self, number):
        if is_validInt(number):
            number = int(number)
            gen = sample(warmupsdb, number)
            for output in gen:
                print(output[1])
        else:
            print("Please provide a valid number.")

    def do_add(self, text):
        cursor.execute("INSERT INTO warmups (warmupName) VALUES (?)", (text,))
        db.commit()

    def do_exit(self,line):
        db.close()
        return True

if __name__ == '__main__':
    warmups().cmdloop()

我的问题出现在

do_add()
功能中,没有出现错误,但提交的更改不会出现在应用程序中,直到我重新启动它。 例如,如果我的数据库有样本:

"Test 1", "Test 2", "Test 3"

我使用命令

add Test 4

gen
命令永远不会返回“测试4”,因为它似乎尚未在数据库中,这不是我想要的行为,我希望能够生成在当前实例期间添加的样本。

我尝试在 sqlite3 和 cmd 的文档中查找信息,以及有关此特定问题的信息,但关于 cmd 库与 sql 数据库结合使用的信息并不多。

python sql python-3.x sqlite python-cmd
1个回答
0
投票

项目已添加到数据库中,但您使用在脚本开头通过 SELECT 语句获取的旧数据。

warmupsdb = cursor.execute("SELECT * FROM warmups").fetchall()

您需要更新您操作的数据。 例如。函数 do_add 可以通过以下数据刷新来扩展:

global warmupsdb
warmupsdb = cursor.execute("SELECT * FROM warmups").fetchall()
© www.soinside.com 2019 - 2024. All rights reserved.