python- sqlite3.OperationalError: около «<»: синтаксическая ошибка

1

Я использую Python 3.6. Когда я пытаюсь реализовать это, в строке: cursor = conn.execute(cmd) это вызывает ошибку в качестве заголовка, кто-нибудь может мне помочь? Спасибо большое.
Изменение: я нашел решение, просто отредактировав 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
  • 4
    Почему бы вам не распечатать cmd . Может быть, id не совсем то, что вы думаете.
  • 0
    Не связанный комментарий к теме вопроса, но убедитесь, что вы не передаете SQL-инъекцию в строку «id».
Показать ещё 1 комментарий
Теги:
sqlite3

1 ответ

0

Ошибка вашего запроса в том, что вы не включаете кавычки внутри cmd, которые необходимы, если ваш аргумент является строкой. Это должно было быть так:

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

Как отметил @Aaron_ab в комментарии. Вы никогда не должны использовать такие SQL-запросы, потому что злоумышленник может выполнить SQL-инъекцию. Например, если он введет в качестве идентификатора 1' OR 1=1/* он вернет все строки таблицы.

Всегда старайтесь использовать подготовленные операторы, которые не позволяют пользователям подделывать свои собственные операторы SQL. Пример:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню