SQLite UPDATE命令未更新数据库



我对SQLite、python和编程都很陌生,正在尝试创建一个家庭媒体服务器数据库。我正在尝试编写一个程序,将新条目添加到我创建的数据库中,并允许我编辑现有条目。虽然我可以很好地添加条目,但更新特定条目是另一回事。举个例子,我希望能够将一个特定的电影标题更新为一个新的标题,而不需要知道它的id。我的程序中导致问题的代码部分是这样的:

def editMedia():
while True:
print('Catagories: title, genre, type, director, length, rating')
editValue = input('What would like to edit?: ')
if editValue not in ('title', 'Title', 'genre', 'Genre', 'type',
'Type', 'director', 'Director', 'length', 'Length',
'rating', 'Rating'):
print('Invalid entry: Please choose one of the catagories')
continue
elif editValue in ('title', 'Title'):
while True:
oldTitle = input('Enter old title: ')
if len(oldTitle) < 1:
print('Invalid entry: Old title must have a value.')
continue
else:
while True:
updateTitle = input('Enter new title: ')
if len(updateTitle) < 1:
print('Invalid entry: New title must have a value.')
continue
else:
break
break
cur.execute('''UPDATE Movie SET title = ? WHERE title = ?''', (updateTitle, oldTitle))
print("Record Updated successfully ")
break
conn.commit()

我用来创建正在编辑的表的代码是:

import sqlite3
conn = sqlite3.connect('mediadb.sqlite')
cur = conn.cursor()
cur.executescript('''
DROP TABLE IF EXISTS Director;
DROP TABLE IF EXISTS Genre;
DROP TABLE IF EXISTS Type;
DROP TABLE IF EXISTS Movie;
CREATE TABLE Director (
id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
name    TEXT UNIQUE);
CREATE TABLE Genre (
id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
name   TEXT UNIQUE);
CREATE TABLE Type (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
name    TEXT UNIQUE);
CREATE TABLE Movie (
id  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
title TEXT  UNIQUE,
genre_id  INTEGER,
type_id INTEGER,
director_id INTEGER,
minutes INTEGER, rating INTEGER);
''')
conn.commit()
cur.close()

当我尝试更新特定的电影标题时,程序运行时没有错误,但当我使用DB Browser for SQLite检查数据库以确认标题已更新时,我发现没有任何更改。

我在这里做错了什么?我追求的是可能的吗?

我刚刚在笔记本电脑上运行了这个程序,可以看到你遇到了一些问题。还有很多可能的改进,但我相信随着时间的推移,你的技能会提高

我已经匆忙做出了一些基本的改变,但这是有效的,我将在下面解释我的发现

def editMedia():
while True:
print('Catagories: title, genre, type, director, length, rating')
editValue = input('What would like to edit?: ').lower()
if editValue not in ('title', 'genre', 'type', 'director', 'length', 'rating'):
print('Invalid entry: Please choose one of the catagories')
continue
elif editValue == 'title':
while True:
oldTitle = input('Enter old title: ')
if len(oldTitle) < 1:
print('Invalid entry: Old title must have a value.')
continue
else:
while True:
updateTitle = input('Enter new title: ')
if len(updateTitle) < 1:
print('Invalid entry: New title must have a value.')
continue
else:
break
conn = sqlite3.connect('mediadb.sqlite')
cur = conn.cursor()
cur.execute('''UPDATE Movie SET title = ? WHERE title = ?''', (updateTitle, oldTitle))
cur.close()
conn.commit()
print("Record Updated successfully ")
break
break
  • 在用户输入要编辑的内容时调用lower((意味着您不必担心CAPS
  • 在执行更新命令之前,您正在调用break,因此脚本从未到达那里
  • 即使在修复了这个问题之后,您也试图在关闭的光标上执行一个命令,该命令会产生ProgrammingError;我将再次为您打开它,然后运行update命令,然后关闭并提交

最新更新