Неправильное сохранение даты в Python

Всем добрый день. Делаю сайт на flask, на одной из страниц есть форм для заполнения. Дата с этой формы сохраняется неправильно. Условно я ввожу дату, питон ее Получает такую "2024-11-27", но в базе данных она сохраняется как 1986. За 26 ноября сохранилась как 1987. Не могу понять из за чего это. Код Функции отвечающий за страницу:

def get_appeals():
    if 'username' in session:
        if session['premison'] != 'DASH' or session['premison']:
            global db

            if request.method == 'GET':
                return render_template('get-appeals.html')
            elif request.method == 'POST':
                count = request.form['count']
                date = request.form['date']
                print(date)
                db.insert_appeals(count, date)
                
                return redirect(url_for('appeals'))
        else:
            return redirect('/')
    else:
        return redirect('/')

Код Функции insert_appeals:

def insert_appeals(self, count, date):
        print(date)
        self.cursor.execute(f'''INSERT INTO appeals (count, date) VALUES ({count}, {date})''')
        self.db.commit()

Ответы (1 шт):

Автор решения: Egor

Основная проблема связана с тем, как вы передаете значения в запрос SQL, что делает ваш код уязвимым для SQL-инъекций и может вызывать некорректное сохранение данных.

Кроме того, если в базе данных поле date имеет тип DATE, то передача строки без кавычек может привести к неверной интерпретации данных. Например, SQL может расценивать дату как арифметическую операцию (например, 2024 - 11 - 27), результатом которой будет 1986.

Используйте параметризованные запросы и убедитесь, что формат данных, передаваемых в базу, соответствует типу поля

def insert_appeals(self, count, date):
    print(date)
    # Используем параметризованный запрос
    self.cursor.execute(
        '''INSERT INTO appeals (count, date) VALUES (?, ?)''',
        (count, date)
    )
    self.db.commit()

Так же советую использовать дополнительную отладку при тестировании продукта:

print(f"INSERT INTO appeals (count, date) VALUES ({count}, {date})")
→ Ссылка