一个Django应用程序,用于从特定的db表中删除最旧的记录。
django-tables-cleaner的Python项目详细描述
tables\u cleaner是一个Django应用程序,用于从特定的db表中删除最旧的记录。在
它的目的是用于生产,以控制生长的规模 包含临时数据的表(用于日志记录、审核…),但保留 根据设计指定的约束的最新记录(请参见TABLES\u CLEANER_TABLES设置)。在
快速入门
安装:
pip install django-tables-cleaner or pip install git+https://github.com/morlandi/django-tables-cleaner
在将“tables\u cleaner”添加到已安装的应用程序设置中,如下所示:
^{pr2}$ 在定期运行管理命令(即使用cron)
python manage.py clean_tables
在
使用
第一个选项是定期调用管理命令清理表,例如通过cron:
usage: manage.py clean_tables [-h] [--database DATABASE] [-d] [--vacuum] [--version] [-v {0,1,2,3}] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback] [--no-color] optional arguments: -h, --help show this help message and exit --database DATABASE Nominates a specific database to load fixtures into. Defaults to the "default" database. -d, --dry-run Don't actually delete records (default: False) --vacuum Run VACUUM after deletion --version show program's version number and exit -v {0,1,2,3}, --verbosity {0,1,2,3} Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output --settings SETTINGS The Python path to a settings module, e.g. "myproject.settings.main". If this isn't provided, the DJANGO_SETTINGS_MODULE environment variable will be used. --pythonpath PYTHONPATH A directory to add to the Python path, e.g. "/home/djangoprojects/myproject". --traceback Raise on CommandError exceptions --no-color Don't colorize the command output.
或者,当使用不同的调度策略时(例如使用django-cron) 可以从Python代码调用以下函数:
clean_tables(logger=None,dry_run=False)
例如:
importtables_cleanertables_cleaner.clean_tables()
最后,对于非常特殊的需要,您可以直接回忆起真正的工作马:
defclean_table(model_name,keep_records,keep_since_days,keep_since_hours,get_latest_by=None,logger=None,dry_run=False)
它只作用于一个表,不需要任何设置。在
设置
- 表格清理器表格
需要清洁的型号列表
选项:
- keep_records: n. of most recent records to be preserved; 0=unused
- keep_since_days: always preserve records more recent than this; 0=unused
- keep_since_hourse: always preserve records more recent than this; 0=unused
示例:
TABLES_CLEANER_TABLES = [ { 'model_name': 'backend.log', 'keep_records': 1000, 'keep_since_days': 1, 'keep_since_hours': 0, }, { 'model_name': 'tasks.updatedevicetask', 'keep_records': 100, 'keep_since_days': 0, 'keep_since_hours': 12, 'get_latest_by': 'created', }, ]
get_latest_by属性是可选的;如果没有提供,则模型的Meta get_latest_by 而是使用。在
真空策略
“真空”可作为最终活动(“真空”)执行。在
从版本v0.1.0开始,我们选择使用“VACUUM”而不是“VACUUM FULL”,因为这一点 似乎更适合于普通数据库维护,原因如下:
- 它可用于Postgresql和Sqlite(希望也适用于其他数据库)
- 数据库所有者可以清空数据库中的所有表
- 不需要独占锁
- 可能会快得多
PostgreSQL文档明确声明不建议将FULL选项用于常规用途; 请参见:VACUUM — garbage-collect and optionally analyze a database
感谢约翰·范登伯格让我注意到这一点。在
有用吗?在
提供了一些单元测试。在
按以下步骤准备虚拟环境:
python -m pip install -r requirements.txt
然后:
./runtests.py
或者:
coverage run --source='.' runtests.py coverage report
参考文献
许可证
这段代码是根据麻省理工学院的许可条款发布的。在
历史
v0.1.4版
- 添加了示例项目
- 重构:应用程序逻辑转移到独立的Python函数
- 添加了单元测试
v0.1.3版
- Python和Django分类器添加到设置.py在
v0.1.2版
- 只有在db发动机支持时才施加真空
v0.1.1版本
- 在PyPI上发布
0.1.0版
- 准备在PyPI上发布
- 使用“真空”代替“真空满”
- 干运行选项重命名为“-d”(原为“-n”)
0.0.5版
- 修复Django 2.x:根据需要从命令调用super()
0.0.4版
- 可自定义的“获取最新信息”属性
- 删除旧版本Django中不可用的EmptyResultSet import
0.0.3版
- 安装程序修复
0.0.2版
- 首次工作实施
0.0.1版
- 初始设置
- 项目
标签: