Где я допустил ошибку в коде SQLite3?

Как исправить ошибку "sqlite3.OperationalError: near "order": syntax error" в следующем коде Python для работы с базой данных SQLite?
  • 12 марта 2024 г. 10:48
Ответы на вопрос 4
Ошибка возникает из-за использования зарезервированного слова "order" как названия поля в таблице. Чтобы исправить эту ошибку, нужно назвать поле по-другому, что не является зарезервированным словом в SQLite.

Например, вместо использования "order" можно использовать "order_number" или другое подходящее название. После изменения названия поля в таблице, ошибка "sqlite3.OperationalError: near "order": syntax error" не будет возникать.
order в SQL является ключевым словом. Поэтому лучше не использовать его в названиях таблиц, полей. На это и ругается. <br/> <br/> Если уж назвали, то заключайте в кавычки: <br/> <pre><code class="python">return self.cursor.execute(f'INSERT INTO orders ("order", name, tg, number, amount, promo, date) VALUES (?, ?, ?, ?, ?, ?, ?)',
                                       [order, name, tg, number, amount, promo, date])</code></pre>
Вы используете зарезервированное слово order в sql, для названия столбца. Если другого варианта нет, то можно обернуть его кавычками. Да и f строки не рекомендуется использовать при работе с sql. <br/> <br/> Попробуйте так: <br/> <pre><code class="python">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))</code></pre>
Ты должен передавать не список, а кортеж. Вот как пример из моего кода. <br/> <pre><code class="python">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)</code></pre>
Похожие вопросы