Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用psycopg2从PostgreSQl获取长值_Python_Postgresql - Fatal编程技术网

Python 使用psycopg2从PostgreSQl获取长值

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

我在从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 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;