Потеря микросекунд при вставке даты в базу данных
У меня есть этот фрагмент кода в представлении:
time_from = datetime.strptime(req.POST['time_from'], "%Y-%m-%d %H:%M:%S.%f")
with connections["mssql_database"].cursor() as cursor:
sql_statement = "EXEC SaveActivity @TimeFrom='%s'" % (time_from)
print(sql_statement)
cursor.execute(sql_statement)
Он печатает это SQL
заявление:
EXEC SaveActivity @TimeFrom='2021-12-01 08:34:54'
Микросекунды отсутствуют. Это нули, но они нужны мне в базе данных. Как я могу это исправить?
Не выполняйте форматирование строки. Передайте данные в качестве параметра. При использовании форматирования строк будет использоваться str(…)
, что для времени даты не очень точно. Используйте:
with connections["mssql_database"].cursor() as cursor:
sql_statement = "EXEC SaveActivity @TimeFrom='%s'"
cursor.execute(sql_statement, (time_from,))
Использование параметров вместо интерполяции строк не только лучше для предотвращения потери данных, но и для предотвращения SQL-инъекций, когда можно передать, например, через строку, SQL-запрос, который затем изменит или утечет из базы данных.