clean¶
说明¶
Uliweb提供了一个清理命令,目前支持对目录和Model的清理.目录清理可以直接使用,但是Model的清理要有相应的处理代码.
clean 提供了两个子命令:
- dir
清理目录
- model
清理Model
命令行说明¶
dir¶
使用格式为:
uliweb clean dir [options] directory
命令行选项:
Options:
-e EXTENSIONS, --extension=EXTENSIONS
Only matches extension. E.g. .txt
-x EXCLUDE_EXTENSIONS, --exclude_extensions=EXCLUDE_EXTENSIONS
Not matches extension.
-r, --recursion Recursion the directory.
-d DAYS, --days=DAYS Delta days before now.
- -e EXTENSIONS, --extension=EXTENSIONS
表示要处理的扩展名,扩展名为
.txt
的形式.如果有多个扩展名可以设置多个,如:-e .txt -e .bak
.- -x EXCLUDE_EXTENSIONS, --exclude_extensions=EXCLUDE_EXTENSIONS
表示要排除的扩展名,可以是多个.
- -r, --recursion
表示对子目录进行递归处理.
- -d DAYS, --days=DAYS
表示要清除DAYS天前的文件
model¶
使用格式为:
uliweb clean model [options] model_name
命令行选项:
Options:
-d DAYS, --days=DAYS Delta days before now.
-c COUNT, --count=COUNT
Records count of cleaning at one time.
- -d DAYS, --days=DAYS
表示要清除DAYS天前的文件
- -c COUNT, --count=COUNT
用来控制多少条记录一个事务.缺省是5000条.
使用此命令,需要对应的Model要定义 clear_data
方法,举例如下:
@classmethod
def clear_data(cls, days, count=5000):
from datetime import timedelta
His = get_model('async_tasks_his')
now = date.now()
i = 0
for row in cls.filter(cls.c.status.in_(['C', '1', 'F']), cls.c.created_time<(now-timedelta(days=days))):
his = His(**row.to_dict())
his.save(insert=True)
row.delete()
i += 1
if i == count:
yield i
i = 0
yield i
clear_data 是一个 classmethod 方法.它接受两个参数:days, count, 分别对应要清理的天数和每次处理的条数.
返回结果可以是一个generator,也可以是一般函数. 每次返回处理的条数.
在调用 clean model 时会自动处理事务,所以在clear_data中不需要处理事务.