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 回答