@Alex_Python_Nub

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

Добрый день, делаю телебот с сохранением истории запросов в sqlite3. выдает такую ошибку:
cursor.execute(f"INSERT INTO masseges (massege) VALUES ({text})")
sqlite3.OperationalError: no such column: 'Название: TDRS 11\nКоличство сделанных оборотов: 4055\nГод запуска: 2013\nНомер спутника: 39070\n'

Сам код:

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()

В чем проблема? Все проверял по нескольку раз.
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Блин, да когда же вы читать научитесь, а?
Никогда не используй f-строки для формирования sql-запроса, это либо даёт невалидный SQL (как в твоём случае), либо оставляет лазейку для SQL-инъекции.
Используй подстановку параметров. Про это буквально в каждом мануале по работе с БД пишут, но ведь читать - не модно.
cursor.execute("INSERT INTO masseges (id, massege) VALUES (NULL, ?)", (text,) )

Ну и да. Правильно пишется message, если речь о сообщениях.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы