2017-10-19 208 views
1

我正在使用SQLAlchemy和Postgresql,并且正在执行一个复杂的查询(可能导致没有行),我需要'as-of timestamp'我从服务器获得的结果(即数据库执行此查询的当前时间戳)。sqlalchemy/postgresql:获取查询的数据库'as-of'时间戳

我怎么能做到这一点?

+0

您可以将'now()as_of'列添加到您想要运行的任何选择查询中。该额外的列将保存'timestamp'。你可以在两个查询之后运行两个查询,第一个是获取数据库时间戳,然后是实际查询。如果更合适,您可以使用客户端的系统时间而不是数据库时间。 –

回答

1

如果您在一个交易中执行您的查询,那么localtimestamp将引用交易开始时间。

例如:

with engine.begin() as t: 
    print(t.execute("SELECT localtimestamp").fetchone()[0]) 
    time.sleep(2) 
    print(t.execute("SELECT localtimestamp").fetchone()[0]) 

它打印:

2017-10-19 09:52:44.646723 
2017-10-19 09:52:44.646723 

即LOCALTIMESTAMP保持在事务的持续时间保持不变。

0

您可以通过运行下面的查询实现这一目标:

select query_start 
from pg_stat_activity 
where query = 'YOUR_QUERY_HERE' 

这给你当查询开始其执行数据库PostgreSQL中的时间。您还可以使用其他标识符(例如查询的pid等)查找查询的开始时间。

当然,关于您可以使用pg_stat_activity表从PostgreSQL中获取的查询的更多数据。您可以通过访问this链接了解更多信息。