我正在使用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'。你可以在兩個查詢之後運行兩個查詢,第一個是獲取數據庫時間戳,然後是實際查詢。如果更合適,您可以使用客戶端的系統時間而不是數據庫時間。 –