一个Django应用程序,用于从特定的db表中删除最旧的记录。

django-tables-cleaner的Python项目详细描述


tables\u cleaner是一个Django应用程序,用于从特定的db表中删除最旧的记录。在

它的目的是用于生产,以控制生长的规模 包含临时数据的表(用于日志记录、审核…),但保留 根据设计指定的约束的最新记录(请参见TABLES\u CLEANER_TABLES设置)。在

快速入门

  1. 安装:

    pip install django-tables-cleaner
    
    or
    
    pip install git+https://github.com/morlandi/django-tables-cleaner
    
  2. 将“tables\u cleaner”添加到已安装的应用程序设置中,如下所示:

    ^{pr2}$ 在
  3. 定期运行管理命令(即使用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

感谢约翰·范登伯格让我注意到这一点。在

FileFields和ImageFields

当模型包含一个或多个FileField或 ImageField不够,因为媒体文件夹中有一些垃圾。在

我通常使用django-cleanup来处理这个问题。在

有用吗?在

提供了一些单元测试。在

按以下步骤准备虚拟环境:

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版

  • 初始设置

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在依赖项上没有这样的方法异常   java如何将@Value注入setter?   验证输入java的最佳实践   java在使用kotlin的安卓项目中没有此类字段错误   我们可以强制java接口实现超时吗?   java将BasicAuth()与FormLogin()组合用于不同的路径   java无法在更新SDK后更新应用程序(未安装应用程序)   macos Java 8、Swing和OSX:对话框使UI对鼠标无响应   java自定义单元格格式以US格式显示,尽管使用了带UK语言环境的DataFormatter   java按升序排列列表字符串数据   java Hibernate OGM[PersistenceUnit:person]无法构建Hibernate SessionFactory   生命周期配置未涵盖java插件执行:com。乱穿马路。专家插件。安卓generation2:安卓mavenplugin:3.5.0:generatesources   java RecyclerView显示为空   当服务器不返回任何输入时,java InputStream read()会阻塞