Что делать с ошибкой OperationalError: no such column?
Добрый день, делаю телебот с сохранением истории запросов в sqlite3. выдает такую ошибку:
cursor.execute(f"INSERT INTO masseges (massege) VALUES ({text})")
sqlite3.OperationalError: no such column: 'Название: TDRS 11nКоличство сделанных оборотов: 4055nГод запуска: 2013nНомер спутника: 39070n'
Сам код:
def write_in_DB(text: str):
connection = sqlite3.connect('bot_database.db')
cursor = connection.cursor()
print(text)
cursor.execute('''
CREATE TABLE IF NOT EXISTS masseges(
id INTEGER PRIMARY KEY AUTOINCREMENT,
massege TEXT
)
''')
cursor.execute(f"INSERT INTO masseges (id, massege) VALUES (NULL, {str(text)})")
cursor.execute('SELECT * FROM masseges')
connection.commit()
messege = cursor.fetchall()
for mes in messege:
print(mes)
connection.close()
В чем проблема? Все проверял по нескольку раз.
Дополнительно:
Ответы:
Блин, да когда же вы читать научитесь, а?
Никогда не используй f-строки для формирования sql-запроса, это либо даёт невалидный SQL (как в твоём случае), либо оставляет лазейку для SQL-инъекции.
Используй подстановку параметров. Про это буквально в каждом мануале по работе с БД пишут, но ведь читать - не модно.
cursor.execute("INSERT INTO masseges (id, massege) VALUES (NULL, ?)", (text,) ) |
cursor.execute("INSERT INTO masseges (id, massege) VALUES (NULL, ?)", (text,) )
Ну и да. Правильно пишется message, если речь о сообщениях.
- Спасибо, в том то и дело, что я читал и в примерах было написано обоими вариантами, в том числе с f.
Message тоже поправил) - Alex_Python_Nub, в первоисточнике (доках на модуль sqlite3) такой ереси нету. При возможности, смотри туда. =)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Ошибка OperationalError: no such column обычно возникает при попытке обратиться к несуществующему столбцу в базе данных. Возможные причины возникновения этой ошибки могут быть различными, но основные из них включают в себя опечатки при написании названия столбца, изменения структуры базы данных без обновления запросов или использование неправильного синтаксиса запроса.
Для решения данной проблемы, следует выполнить следующие шаги:
1. Проверьте правильность написания названия столбца в вашем SQL запросе. Убедитесь, что вы используете точное название столбца без опечаток.
2. Удостоверьтесь, что структура вашей базы данных соответствует ожидаемой. Если вы внесли изменения в структуру базы данных, убедитесь, что все запросы были обновлены соответственно.
3. Проверьте синтаксис вашего SQL запроса. Убедитесь, что вы используете правильный синтаксис для обращения к столбцам в вашей базе данных.
Пример использования правильного синтаксиса запроса в PHP:
$query = "SELECT column_name FROM table_name"; $result = mysqli_query($connection, $query);
Если после выполнения вышеуказанных шагов проблема не была решена, попробуйте перезагрузить базу данных или обратитесь к администратору базы данных для дополнительной поддержки.
Надеюсь, что эти рекомендации помогут вам решить проблему с ошибкой OperationalError: no such column и продолжить работу с вашей базой данных без проблем.