使用日期列删除早于期间的所有表中的所有数据

时间:2013-04-08 00:58:38

标签: python postgresql datetime python-2.7 sqlalchemy

我有一组表,它们都有一个等于插入时间的日期列(没有时区的时间戳)。

如何使用日期列删除超过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())

1 个答案:

答案 0 :(得分: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也不起作用。