我有一组表,它们都有一个等于插入时间的日期列(没有时区的时间戳)。
如何使用日期列删除超过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())
答案 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
也不起作用。