【问题标题】:Python-SQL queries with variables带有变量的 Python-SQL 查询
【发布时间】:2015-09-29 08:14:06
【问题描述】:

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

文件“I:\A2\SQLite\Create Table.py”,第 140 行,在 searchStudent cur.execute("SELECT Student_ID, First_Name, Last_Name FROM School WHERE First_Name IS "+firstName) sqlite3.OperationalError:没有这样的列: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

但这带来了同样的错误。

【问题讨论】:

  • WHERE First_Name ="+firstNameisted
  • 我试过了,但它仍然返回相同的错误:(

标签: python sql sqlite variables select


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2018-12-27
    相关资源
    最近更新 更多