当我运行查询以返回学生的信息时遇到问题,我收到此错误:
在searchStudent中的文件“I:\ A2 \ SQLite \ Create Table.py”,第140行 cur.execute(“SELECT Student_ID,First_Name,Last_Name FROM School WHERE First_Name IS”+ firstName) sqlite3.OperationalError:没有这样的专栏:Joshua
以下是代码,Joshua是该名称的输入。
firstName = input("\nWhat is the first name of the student you would like to search for?")
con = sqlite3.connect("School.sql")
cur = con.cursor()
cur.execute("SELECT Student_ID, First_Name, Last_Name FROM School WHERE First_Name IS "+firstName)
print(cur.fetchall())
数据库有30个条目,包含Student_ID (primary key)
,First_Name (text)
,Last_Name (text)
,Year (integer)
,Form_Group(text)
和House(text)
。
查询应返回具有相同名字的所有学生的详细信息。这应该包括他们的Student_ID
,First_Name
和Last_Name
。
导致错误的原因是什么?
编辑:我试过了:
WHERE First_Name = "+firstName
但是这带来了同样的错误。
答案 0 :(得分:2)
SQL中的字符串文字需要用单引号('
)包围,否则数据库将它们解释为对象名称 - 正如您所见,当它找不到列时失败。
cur.execute("SELECT Student_ID, First_Name, Last_Name FROM School WHERE First_Name = '" + firstName + "'")
但是,使用像这样的字符串连接是一种不好的做法,并使您的应用程序对SQL注入攻击开放。建议您使用准备好的声明:
cur.execute("SELECT Student_ID, First_Name, Last_Name FROM School WHERE First_Name = ?", firstName)
另请注意,比较SQL中的值是由=
运算符完成的,而不是is
运算符。