Неправильное сохранение даты в 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 шт):
Основная проблема связана с тем, как вы передаете значения в запрос 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})")