Как исправить ошибку "sqlite3.OperationalError: near "order": syntax error" в следующем коде Python для работы с базой данных SQLite?
Ошибка возникает из-за использования зарезервированного слова "order" как названия поля в таблице. Чтобы исправить эту ошибку, нужно назвать поле по-другому, что не является зарезервированным словом в SQLite. Например, вместо использования "order" можно использовать "order_number" или другое подходящее название. После изменения названия поля в таблице, ошибка "sqlite3.OperationalError: near "order": syntax error" не будет возникать.
order в SQL является ключевым словом. Поэтому лучше не использовать его в названиях таблиц, полей. На это и ругается.
Если уж назвали, то заключайте в кавычки:
return self.cursor.execute(f'INSERT INTO orders ("order", name, tg, number, amount, promo, date) VALUES (?, ?, ?, ?, ?, ?, ?)', [order, name, tg, number, amount, promo, date])
Вы используете зарезервированное слово order в sql, для названия столбца. Если другого варианта нет, то можно обернуть его кавычками. Да и f строки не рекомендуется использовать при работе с sql.
Попробуйте так:
async def add_order(self, order, name, tg, number, amount, promo, date): with self.connection: return self.cursor.execute('INSERT INTO orders ("order", name, tg, number, amount, promo, date) VALUES (?, ?, ?, ?, ?, ?, ?)', (order, name, tg, number, amount, promo, date))
Ты должен передавать не список, а кортеж. Вот как пример из моего кода.
photo_info = (file, md5_hash, add_date, author_id, moderated) db_cursor.execute("""INSERT INTO photo (file_name, md5, add_date, author_id, moderated) VALUES (?, ?, ?, ?, ?) """, photo_info)