1

挿入された時間に等しい日付列 (タイムゾーンなしのタイムスタンプ) を持つテーブルのセットがあります。

日付列を使用して、できればモデルを使用して各テーブルを明示的に削除せずに、24 時間より古いすべてのテーブルのすべてのデータを削除するにはどうすればよいですか?

すべてのテーブルからすべてを削除する方法は次のとおりですが、日付のテストを追加するときはややハックに感じます。

#!/usr/bin/env python

import sqlalchemy

engine = sqlalchemy.create_engine('postgresql+psycopg2://user:password@host:port/database')
meta = sqlalchemy.MetaData()
meta.reflect(bind=engine)

for table in reversed(meta.sorted_tables):
    engine.execute(table.delete())
4

1 に答える 1

3

次のようにする必要があります。

import datetime
too_old = datetime.datetime.today() - datetime.timedelta(days=1)
for table in reversed(meta.sorted_tables):
    engine.execute(table.delete().where(table.c.timestampinserted <= too_old))

がある場合は、問題が発生する可能性があることに注意してくださいforeign key constraints。テーブルが によって参照されている場合もtruncate機能しませんforeign key constraint

于 2013-04-08T14:03:14.897 に答える