【发布时间】:2015-08-26 20:05:55
【问题描述】:
我正在处理一个放置具有 9000 行设备名称的文本文件的 CRON 作业。
该作业每天使用来自我们域中的网络爬虫的更新列表重新创建文件。
我遇到的是,当我让以下工作人员将我的导入运行到我的数据库中时,db.[name].id 使用下面的这种方法不断增长
scheduler.py
# -*- coding: utf-8 -*-
from gluon.scheduler import Scheduler
def demo1():
db(db.asdf.id>0).delete()
db.commit()
with open('c:\(project)\devices.list') as f:
content = f.readlines()
for line in content:
db.asdf.insert(asdf = line)
db.commit()
mysched = Scheduler(db, tasks = dict(demo1 = demo1) )
default.py(初始启动)
@auth.requires_membership('!Group-IS_MASTER')
def rgroup():
mysched.queue_task('demo1',start_time=request.now,stop_time = None,prevent_drift=True,repeats=0,period=86400)
return 'you are member of a group!'
所以下次工作开始时,它将从db.[name].id = 9001 开始。因此,根据爬虫的返回,ID 号每天都会增长 9000 左右。它看起来很草率,我不想在多年后遇到我不知道的数据库限制问题。
(我是 DB 新手(我知道,我什么都不知道))
太棒了.....
这是我想出的,我不知道这是否是最佳做法。在创建条目的同一函数中使用db.[name].drop() 时遇到的一个问题是数据库表不存在,我的工作状态变为“失败”。所以我在工作中定义了表格。见下文:
scheduler.py
from gluon.scheduler import Scheduler
def demo1():
db.asdf.drop() #<=====Kill db.asdf
db.commit() #<=====Commit Kill
db.define_table('asdf',Field('asdf'),auth.signature ) #<==== Phoenix Rebirth!!!
with open('c:\(project)\devices.list') as f:
content = f.readlines()
for line in content:
db.asdf.insert(asdf = line)
db.commit() #<=========== Magic
mysched = Scheduler(db, tasks = dict(demo1 = demo1) )
在上面代码的cmets中的凤凰重生那一行。这是实现我的目标的最佳方式吗?
我的 ID 从 1 开始,这就是我想要的,但我应该这样做吗?
谢谢!
附:请原谅我使用 Windows 目录结构的示例,因为我当前的非产品沙箱是我的 Windows 工作站。 :(
【问题讨论】:
标签: python sqlite cron web2py scheduler