我正在使用SQLAlchemy和Postgresql,并且正在执行一个复杂的查询(可能导致没有行),我需要'as-of timestamp'我从服务器获得的结果(即数据库执行此查询的当前时间戳)。sqlalchemy/postgresql:获取查询的数据库'as-of'时间戳
我怎么能做到这一点?
我正在使用SQLAlchemy和Postgresql,并且正在执行一个复杂的查询(可能导致没有行),我需要'as-of timestamp'我从服务器获得的结果(即数据库执行此查询的当前时间戳)。sqlalchemy/postgresql:获取查询的数据库'as-of'时间戳
我怎么能做到这一点?
如果您在一个交易中执行您的查询,那么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保持在事务的持续时间保持不变。
您可以通过运行下面的查询实现这一目标:
select query_start
from pg_stat_activity
where query = 'YOUR_QUERY_HERE'
这给你当查询开始其执行数据库PostgreSQL中的时间。您还可以使用其他标识符(例如查询的pid
等)查找查询的开始时间。
当然,关于您可以使用pg_stat_activity
表从PostgreSQL中获取的查询的更多数据。您可以通过访问this链接了解更多信息。
您可以将'now()as_of'列添加到您想要运行的任何选择查询中。该额外的列将保存'timestamp'。你可以在两个查询之后运行两个查询,第一个是获取数据库时间戳,然后是实际查询。如果更合适,您可以使用客户端的系统时间而不是数据库时间。 –