python-sqlite3.OperationalError:near“<”:语法错误

我正在使用python 3.6 . 当我尝试实现它时,在line:cursor = conn.execute(cmd)它会引发一个错误作为 Headers ,任何人都可以帮助我吗?非常感谢 .
编辑:我通过编辑str(id)到str(Id)找到了解决方案

def getProfile(id):
    conn=sqlite3.connect("FaceBase.db")
    cmd="SELECT * FROM People WHERE ID=" +str(id)
    cursor=conn.execute(cmd)
    profile=None
    for row in cursor:
       profile=row
    conn.close()
    return profile

回答(1)

2 years ago

您的查询的错误是您不在cmd中包含引号,如果您的参数是字符串,则需要引号 . 应该是这样的:

cmd="SELECT * FROM People WHERE ID='{}'".format(str(id))

正如@Aaron_ab在评论中提到的那样 . 您永远不应该使用这样的SQL查询,因为恶意用户可以执行SQL注入 . 例如,如果他作为ID 1' OR 1=1 /* 放置它将返回表的所有行 .

总是,尝试使用不允许用户伪造自己的SQL语句的预准备语句 . 一个例子:

cmd="SELECT * FROM People WHERE ID=%s"
curs.execute(cmd, (str(id),))