Потеря микросекунд при вставке даты в базу данных

У меня есть этот фрагмент кода в представлении:

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-запрос, который затем изменит или утечет из базы данных.

Вернуться на верх