2017-10-19 204 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鏈接瞭解更多信息。