Где у меня ошибка в sqlite3?
Вылезает такая ошибка: sqlite3.OperationalError: near "order": syntax error
async def add_order(self, order, name, tg, number, amount, promo, date): with self.connection: return self.cursor.execute(f'INSERT INTO orders (order, name, tg, number, amount, promo, date) VALUES (?, ?, ?, ?, ?, ?, ?)', [order, name, tg, number, amount, promo, date]) |
async def add_order(self, order, name, tg, number, amount, promo, date): with self.connection: return self.cursor.execute(f'INSERT INTO orders (order, name, tg, number, amount, promo, date) VALUES (?, ?, ?, ?, ?, ?, ?)', [order, name, tg, number, amount, promo, date])
Просто косяк, но никак не могу найти, такая таблица существует, столбец order тоже
Дополнительно:
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]) |
return self.cursor.execute(f'INSERT INTO orders ("order", name, tg, number, amount, promo, date) VALUES (?, ?, ?, ?, ?, ?, ?)', [order, name, tg, number, amount, promo, date])
- Большое спасибо!
Вы используете зарезервированное в sql слово order, для названия столбца. Если другого варианта нет, то можно обернуть его кавычками. Да и f строки не рекомендуется использовать при работе с sql (Почему не стоит использовать f строки в SQL Python запросах? и Как сделать безопасно строку с 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)) |
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) |
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)
-
Ты должен передавать не список, а кортеж
В sqlite3 можно передавать списки.
- Михаил Р., У меня это вызывало ошибки, поэтому я передавал только кортежи.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы выявить ошибку в использовании SQLite3, вам необходимо выполнить несколько шагов для диагностики проблемы.
1. Проверьте правильность пути к базе данных SQLite3. Убедитесь, что путь указан правильно и база данных существует по указанному пути.
2. Проверьте правильность SQL запросов. Убедитесь, что все SQL запросы корректно синтаксически и не содержат ошибок.
3. Убедитесь, что вы правильно открываете и закрываете соединение с базой данных. Не забывайте закрывать соединение после завершения работы с базой данных.
4. Проверьте наличие необходимых прав доступа к базе данных. Убедитесь, что у вас есть права на чтение и запись в указанную базу данных.
5. Проверьте наличие необходимых расширений для работы с SQLite3. Убедитесь, что расширение SQLite3 установлено и активировано в вашей среде выполнения PHP.
Приведу пример кода на PHP для подключения к базе данных SQLite3:
$db = new SQLite3('path/to/database.db'); if(!$db) { die($db->lastErrorMsg()); } else { echo 'Connected to the database.'; }
Если после выполнения вышеперечисленных шагов ошибка все еще присутствует, попробуйте выполнить более детальное логирование или обратитесь за помощью к сообществу разработчиков для более глубокого анализа проблемы.