Python JSON构建对象删除带有时区的时间戳中的尾随0

Python JSON构建对象删除带有时区的时间戳中的尾随0,python,postgresql,Python,Postgresql,无论何时带有时区的时间戳以毫秒内的0结尾,在执行JSON_BUILD_对象时,最后一个0将被删除 我正在创建一个json对象,如下所示: RETURN ( JSON_BUILD_OBJECT( 'log_entries', (SELECT JSON_AGG(logs) FROM ( SELECT log_id last_activity_time, -

无论何时带有时区的时间戳以毫秒内的0结尾,在执行JSON_BUILD_对象时,最后一个0将被删除

我正在创建一个json对象,如下所示:

RETURN (
    JSON_BUILD_OBJECT(
        'log_entries',
        (SELECT JSON_AGG(logs)
         FROM (
                  SELECT log_id
                         last_activity_time,  -- this is the timestamp 
如果我选择列并返回而不创建json,则返回表中的时间戳值为:

2021-02-11 18:06:21.511490 +00:00
如果返回JSON,则为:

"2021-02-11T18:06:21.51149+00:00"
如何保留9之后的最后一个“0”

编辑:

不包含所有6毫秒数字的Python代码(如果尾随的0被截断):


不要保留0,只需在其周围设置格式:

from datetime import datetime

dt = "2021-02-11T18:06:21.51149+00:00" 
input_format = "%Y-%m-%dT%H:%M:%S.%f%z"
datetime.strptime(dt, input_format)

datetime.datetime(2021, 2, 11, 18, 6, 21, 511490, tzinfo=datetime.timezone.utc)


我很好奇你在用“常规精选”做什么。如果我对带有timestamptz列的表执行select*,我会看到它也会删除尾随的零-不涉及JSON。@RichardWheeldon在这两种情况下,它都是由函数返回的查询。返回表列不会删除0,或者作为json返回,这会删除0。我尝试从表中选择*,但没有为我删除0。这似乎只有在创建json时才会发生。可能是因为该值已转换为字符串。我不确定。我在postgres 11.8上,为什么要保留
0
?这是毫无意义的。但是如果你真的想控制格式,请使用
to_char()。之所以需要0,是因为我们将所有时间戳存储在UTC中,然后根据需要转换到不同的时区。如果没有所有6毫秒的数字,我会得到一个“无效的isoformat字符串”错误。我在文章中添加了python代码,如果缺少尾随0,则该代码将中断。顺便说一句,“datetime.fromsoformat(date\u string)…注意:这不支持解析任意ISO 8601字符串-它仅用于反操作。功能更全面的ISO 8601解析器,
dateutil.parser.isoparse
在第三方软件包中提供。”
from datetime import datetime

dt = "2021-02-11T18:06:21.51149+00:00" 
input_format = "%Y-%m-%dT%H:%M:%S.%f%z"
datetime.strptime(dt, input_format)

datetime.datetime(2021, 2, 11, 18, 6, 21, 511490, tzinfo=datetime.timezone.utc)