我有一个包含以下列的表
command_create_table = """CREATE TABLE if not exists place (
name VARCHAR(100),
lat DOUBLE(100, 10),
lng DOUBLE(100,10),
vicinity VARCHAR(100),
typeOfPlace VARCHAR(100));"""
此typeOfPlace
列可以包含food
,restaurant
,museum
等类型。现在基于我在名为{{1的变量中捕获的用户输入}}表示typeVar
列中的特定值,我想检索项目。所以我有以下代码:
typeOfPlace
但我收到错误
connection = sqlite3.connect("places.db")
cursor = connection.cursor()
cursor.execute("SELECT * from place WHERE typeOfPlace=typeVar")
ans= cursor.fetchall()
我错过了什么?请建议。
答案 0 :(得分:2)
尝试:
cursor.execute("SELECT * from place WHERE typeOfPlace=?", (typeVar,))
typeVar后面的尾随逗号可能看起来很奇怪,但是params需要一个序列,并且添加尾随逗号会使值传递一个长度为1的元组。
永远不要使用字符串格式将值传递给SQL查询。如果变量包含SQL语法,则可能发生错误。查找SQL注入攻击,了解有关不应该执行此操作的更多详细信息。正如我在这里所做的那样,单独传递参数是可行的方法。
答案 1 :(得分:0)
问题是您正在检查文字字符串"typeVar"
,而不是用户输入。
而不是
cursor.execute("SELECT * from place WHERE typeOfPlace=typeVar")
尝试:
cursor.execute("SELECT * from place WHERE typeOfPlace={}".format(typeVar))
。