提问人:abd hadi Sakbani 提问时间:11/3/2023 最后编辑:VLAZabd hadi Sakbani 更新时间:11/3/2023 访问量:27
当我尝试在 python 中向 SQLite3 数据库添加数据时发生错误
An error happens when I try to add data to SQLite3 database in python
问:
我已经创建了一个应用程序,用于使用 python 和 SQLite 3 在数据库中显示、添加、删除和更新技能。 在应用程序内部,我使用了函数方法。 我使用的算法是:
- 打印用户说明
- 等待用户输入他想要的操作
- 使用他的条目转到函数
# check if command is exist
if user_input in commands_list:
print(f"the command {user_input} founded")
if user_input == "s":
show_skills()
elif user_input == "a":
add_skill()
elif user_input == "d":
delete_skill()
elif user_input == "u":
update_skill()
else:
quitTheApp()
else:
print(f"Sorry the command \"{user_input}\" is not exist.")
- 函数 add_skills() 首先要求输入技能名称来添加它,但在此之前它会检查它是否存在于数据库中,如果存在,它会正常添加它,否则它会告诉用户该技能已经存在并询问他是否要更改进度。 这是添加函数:
def add_skill():
sk = input("Write skill name: ").strip().capitalize()
cr.execute(
f"select name form skills where name = {sk} and id = {uid}")
result = cr.fetchone()
if result == None:
prog = input("Write skill progress: ").strip()
cr.execute(
f"insert into skills(name, progress, id) values('{sk}', '{prog}', '{uid}')")
print("Data has been added.")
else:
print("This skill is already exist in database.")
print("Do you want to update the progress of it ? (y/n)", end=" ")
theA = input().strip().lower()
match theA:
case "y":
Nprog = input("Write the new skill progress: ").strip()
cr.execute(
f"update skills set progress = '{Nprog}' where name = '{sk}' and id = '{uid}'")
print("Data has been updated.")
case "n":
print("Quitting the app.")
quitTheApp()
case _:
print("unexpacted answer .sorry please try again.")
commit_and_close()
因此,当我使用add_skills函数在终端中测试应用程序时,它只显示一个错误。
我在终端中输入了“a”命令以使用添加功能,然后我输入了一个名称,它以前在数据库中不存在,它向我显示此错误:near "skills": syntax error
答:
0赞
luona.dev
11/3/2023
#1
你的SQL语句中有错别字:
cr.execute(f"select name form skills where name = {sk} and id = {uid}")
form
应该是 .from
{sk}
不用单引号 () 括起来。'
更正后的行应为:
cr.execute(f"select name from skills where name = '{sk}' and id = '{uid}'")
虽然这应该有效,但我建议使用参数化查询来降低 SQL 注入的风险。此外,最好将 SQL 关键字大写,以提高可读性。所以我建议:
cr.execute("SELECT name FROM skills WHERE name = ? AND id = ?", (sk, uid))
评论
0赞
abd hadi Sakbani
11/3/2023
非常感谢🌹。我没有意识到这是 FROM 语句😅。并感谢您的推荐
评论