从数据库中删除列表框中的选择

2024-04-19 10:50:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我基本上有两个python脚本,一个用于前端,另一个用于后端。在前端我有:

def delete_command():
    back.delete(selected_tuple[0])

因此,基本上单击列表框中的一个条目,然后在后端脚本上,它有一个数据库调用(sqllite3)

def delete(id):
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    db_path = os.path.join(BASE_DIR, "AVDatabase.db")
    conn=sqlite3.connect(db_path)
    cur=conn.cursor()
    cur.execute('DELETE * FROM "Books"  where BookId=?',(BookId,))
    conn.commit()
    conn.close()

但我一直有个错误:

cur.execute('DELETE * FROM "Books"  where BookId=?',(BookId,))
NameError: name 'BookId' is not defined

数据库已经存在,所以它不是动态创建的,不知道为什么它认为BookID列没有定义,BookID是主Books表上的主键整数


Tags: path脚本数据库executedbbaseosdef
2条回答

您没有定义BookId

delete()方法需要一个名为id的参数,而您在定义中的任何地方都没有使用它

id替换BookIdcur.execute('DELETE * FROM "Books" where BookId=?',(BookId,))cur.execute('DELETE * FROM "Books" where BookId=?',(id,))

def delete(id):
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    db_path = os.path.join(BASE_DIR, "AVDatabase.db")
    conn=sqlite3.connect(db_path)
    cur=conn.cursor()
    cur.execute('DELETE * FROM "Books"  where BookId=?',(id,))
    conn.commit()
    conn.close()

这与数据库中的内容无关,甚至与SQL语句本身无关。您只是还没有定义BookId。此代码会导致相同的错误:

class Cur:
    def execute(self, statement, values):
        pass

cur = Cur()
cur.execute('DELETE * FROM "Books"  where BookId=?',(BookId,))

结果:

Traceback (most recent call last):
  File "...", line 10, in <module>
    cur.execute('DELETE * FROM "Books"  where BookId=?',(BookId,))
NameError: name 'BookId' is not defined

如@Powertieke所说,将BookId更改为id

相关问题 更多 >