2017-10-19 10 views
1

SQLAlchemyとPostgresqlを使用していますが、複雑なクエリを実行しています(行が返されない可能性があります)。サーバーから取得した結果(つまり、このクエリがデータベースによって実行されたときの現在のタイムスタンプ)。sqlalchemy/postgresql:データベースの 'as-of'クエリのタイムスタンプを取得

これをどのように達成できますか?

+0

実行する選択クエリに 'now()as_of'カラムを追加することができます。その余分の列は 'timestamp'を保持します。最初に2つのクエリを実行し、最初にデータベースのタイムスタンプと実際のクエリをフェッチすることができます。より適切な場合は、データベース時間の代わりにクライアントのシステム時間を使用することができます。 –

答えて

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のリンクをご覧ください。

関連する問題