将日期插入数据库时丢失微秒
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 查询或者泄露数据库。
我在视图中有此代码片段:
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 查询或者泄露数据库。