Python 使用psycopg2从PostgreSQl获取长值
我在从PostgreSQL检索长值时面临问题 我使用以下SQL命令:Python 使用psycopg2从PostgreSQl获取长值,python,postgresql,Python,Postgresql,我在从PostgreSQL检索长值时面临问题 我使用以下SQL命令: SELECT *, (extract(epoch FROM start_timestamp) * 1000) FROM lot WHERE EXTRACT(EPOCH FROM lot.start_timestamp) * 1000 >=1265299200000 AND EXTRACT(EPOCH FROM lot.start_timestamp) * 1000 <=1265990399999 ORDER
SELECT *, (extract(epoch FROM start_timestamp) * 1000) FROM lot
WHERE EXTRACT(EPOCH FROM lot.start_timestamp) * 1000 >=1265299200000 AND
EXTRACT(EPOCH FROM lot.start_timestamp) * 1000 <=1265990399999
ORDER BY start_timestamp DESC limit 9 offset 0
下面是我得到的:
1.26586076282e+12
我将这个值从python cgi传递到JSON中的JavaScript
如果我用JavaScript进行手动转换
1.26586076282e+12
// summary.date is 1.26586076282e+12
var timestamp = summary.date * 1;
// Get 1265860762820
alert(timestamp);
存在3ms误差差
1265860762817
1265860762820-
==============
3
==============
我怎样才能避免这样的错误呢?我可以确保psycopg2返回给我的是1265860762817,而不是1.26586076282e+12我使用psycopg2和pygres得到的结果相同。当此选择返回浮点值时,您可以修改代码以设置返回值的格式:
def format_float_fld(v):
#return str(v)
return ('%20.0f' % (v)).strip()
如果您使用str(s)
,那么您将获得科学记数法
您还可以将查询更改为返回bigint
,而不是float
:
SELECT (EXTRACT(EPOCH FROM TIMESTAMP '2010-02-16 20:38:40.123') * 1000)::bigint;
我使用psycopg2和pygres得到了相同的结果。当此选择返回浮点值时,您可以修改代码以设置返回值的格式:
def format_float_fld(v):
#return str(v)
return ('%20.0f' % (v)).strip()
如果您使用str(s)
,那么您将获得科学记数法
您还可以将查询更改为返回bigint
,而不是float
:
SELECT (EXTRACT(EPOCH FROM TIMESTAMP '2010-02-16 20:38:40.123') * 1000)::bigint;