Python sqlite3选择在特定列上只包含特定变量值的行

时间:2018-04-17 22:52:39

标签: python sql sqlite

我有一个包含以下列的表

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列可以包含foodrestaurantmuseum等类型。现在基于我在名为{{1的变量中捕获的用户输入}}表示typeVar列中的特定值,我想检索项目。所以我有以下代码:

typeOfPlace

但我收到错误

connection = sqlite3.connect("places.db")

cursor = connection.cursor()      
cursor.execute("SELECT * from place WHERE typeOfPlace=typeVar")
ans= cursor.fetchall()

我错过了什么?请建议。

2 个答案:

答案 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))