Что делать с ошибкой OperationalError: no such column?

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

Добрый день, делаю телебот с сохранением истории запросов в 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) такой ереси нету. При возможности, смотри туда. =)
Нужно решить такую задачу?

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

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Ошибка OperationalError: no such column обычно возникает при попытке обратиться к несуществующему столбцу в базе данных. Возможные причины возникновения этой ошибки могут быть различными, но основные из них включают в себя опечатки при написании названия столбца, изменения структуры базы данных без обновления запросов или использование неправильного синтаксиса запроса.

Для решения данной проблемы, следует выполнить следующие шаги:

1. Проверьте правильность написания названия столбца в вашем SQL запросе. Убедитесь, что вы используете точное название столбца без опечаток.

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

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

Пример использования правильного синтаксиса запроса в PHP:

$query = "SELECT column_name FROM table_name";
$result = mysqli_query($connection, $query);

$query = "SELECT column_name FROM table_name"; $result = mysqli_query($connection, $query);

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

Надеюсь, что эти рекомендации помогут вам решить проблему с ошибкой OperationalError: no such column и продолжить работу с вашей базой данных без проблем.

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

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

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

комментарий

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

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