SQLAlchemyとPostgresqlを使用していますが、複雑なクエリを実行しています(行が返されない可能性があります)。サーバーから取得した結果(つまり、このクエリがデータベースによって実行されたときの現在のタイムスタンプ)。sqlalchemy/postgresql:データベースの 'as-of'クエリのタイムスタンプを取得
これをどのように達成できますか?
SQLAlchemyとPostgresqlを使用していますが、複雑なクエリを実行しています(行が返されない可能性があります)。サーバーから取得した結果(つまり、このクエリがデータベースによって実行されたときの現在のタイムスタンプ)。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'を保持します。最初に2つのクエリを実行し、最初にデータベースのタイムスタンプと実際のクエリをフェッチすることができます。より適切な場合は、データベース時間の代わりにクライアントのシステム時間を使用することができます。 –