带有变量的Python-SQL查询

时间:2015-09-29 08:14:07

标签: python sql sqlite variables select

当我运行查询以返回学生的信息时遇到问题,我收到此错误:

  

在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_IDFirst_NameLast_Name

导致错误的原因是什么?

编辑:我试过了:

WHERE First_Name = "+firstName

但是这带来了同样的错误。

1 个答案:

答案 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运算符。