将日期插入数据库时​​丢失微秒

Losing microseconds when inserting date to database

我在视图中有此代码片段:

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<strong>, (time_from,)</strong>)

在字符串插值上使用参数不仅可以更好地防止数据丢失,还可以防止 SQL 可能通过的注入,例如通过字符串,然后将修改的 SQL 查询或者泄露数据库。