Где у меня ошибка в sqlite3?

Ссылка скопирована
1 ответ

Вылезает такая ошибка: 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 можно передавать списки.

  • Михаил Р., У меня это вызывало ошибки, поэтому я передавал только кортежи.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Для того чтобы выявить ошибку в использовании 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.';
}

$db = new SQLite3('path/to/database.db'); if(!$db) { die($db->lastErrorMsg()); } else { echo 'Connected to the database.'; }

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

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно