sqlite3.OperationalError: возле "Сок": синтаксическая ошибка - PullRequest
0 голосов
/ 16 декабря 2018

Этот код:

class Product:

    def product_stocklevel(self,product): # checks stock level for a given product
        with sqlite3.connect("db_name.db") as db:
            cursor = db.cursor()
            sql = "SELECT StockLevel FROM Product WHERE Name=%s" % (product)
            cursor.execute(sql) # line that I think causes error
            product_stock = cursor.fetchone()
            return product_stock

Параметр product задается посредством ввода данных пользователем, где пользователь вводит название продукта, для которого он хочет найти уровень запаса, в базе данных магазина.,

Возвращает:

sqlite3.OperationalError: возле "Сок": синтаксическая ошибка (когда я вхожу в апельсиновый сок)

Может кто-нибудь сказать мне, почему?

1 Ответ

0 голосов
/ 16 декабря 2018

Ваш запрос расширяется до SELECT StockLevel FROM Product WHERE Name=Orange Juice, что не является допустимым SQL.

Кроме того, передача (возможного) пользовательского контента, не экранированного в запрос SQL, является плохой идеей и оставляет ваше приложение открытым длячто-то под названием «SQL-инъекция».

Вместо этого используйте подстановку параметров:

sql = "SELECT StockLevel FROM Product WHERE Name=?"
cursor.execute(sql, (product,))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...