如何通过python获取并比较postgreSQL中的两个时间戳值?

时间:2014-07-16 23:26:04

标签: python postgresql timestamp comparison

我目前正在使用psycopg2和python与postgreSQL数据库进行交互。我在一个名为“test”的数据库中,有两个表:“test1”和“test2”。

每个表中有一行,该行有两列:

  • 日期,具有current_date值
  • 时间戳,具有current_timestamp值。

我使用以下代码搜索它:

 """SELECT timestamp 
FROM test1 
WHERE date = '2014-07-16';""" 

如果我输入此信息,终端会给出:

         timestamp          
----------------------------
 2014-07-16 16:10:22.380059
(1 row)

现在,我想查看一个时间戳,并让我的程序告诉我它是否超过另一个时间超过30分钟。但是,我在获取这些值以便在python中使用时遇到了麻烦,并且弄清楚比较是如何工作的。我对postgreSQL完全不熟悉,所以我对它的语法不太熟悉,所以我在尝试将SELECT命令的结果分配给变量时遇到了很多麻烦,然后我可以使用python进行比较。

感谢任何和所有帮助!

感谢。

2 个答案:

答案 0 :(得分:1)

我只使用Python和MySQL,但是postgreSQL doesn't seem too different

>>> cur.execute("SELECT timestamp FROM test1 WHERE date = '2014-07-16'")
>>> cur.fetchone()

现在,从文档中看,从DB中检索的时间戳可能会自动转换为Python中的datetime对象,这很方便。但即使它是一个字符串,这仍然不是问题:

>>> from datetime import datetime
>>> import time
>>> d = datetime.strptime('2014-07-16 16:10:22.380059', '%Y-%m-%d %H:%M:%S.%f')
>>> time.mktime(d.timetuple())
1405483822.0

将两个日期时间转换为时间戳并减去以检查差异是否大于1800(30 * 60)秒。在此过程中丢失微秒,但可能不需要此级别的粒度。

答案 1 :(得分:0)

因为在这种情况下你知道要在 Postgres 和同一个数据库中比较的两个值,我建议你在纯 SQL 中进行比较。

鉴于这些表格:

create table foo
(
  id serial,
  created timestamp without time zone
);

create table bar
(
  id serial,
  created timestamp without time zone
);

这个数据:

insert into foo (created) VALUES
('2014-07-16 16:10:22.380059'),
('2014-07-16 17:10:21.480048'),
('2014-07-16 16:32:23.580037');


insert into bar (created) VALUES
('2014-07-16 16:44:22.380059'),
('2014-07-16 17:15:21.480048'),
('2014-07-16 16:38:23.580037');

您可以查询此表单:

select ( (select created from bar order by id limit 1) -
         (select created from foo order by id limit 1)
       ) > interval '30 minutes' as time_diff;

每个栏目的详细信息可能因您的需要而异。

然后回到你的 Python 代码中,你会得到一个0(如果不是> 30分钟)或1,如果它是> 30分钟。

SQL Fiddle