gpt4 book ai didi

python - web2py 计划任务重新创建(重置)数据库

转载 作者:行者123 更新时间:2023-12-03 18:13:42 24 4
gpt4 key购买 nike

我正在处理一个放置具有 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) )

在上面代码注释中的凤凰重生行中。这是实现我的目标的最佳方式吗?

我的 ID 从 1 开始这就是我想要的,但我应该这样做吗?

谢谢!

附言请原谅我使用 Windows 目录结构的示例,因为我当前的非产品沙箱是我的 Windows 工作站。 :(

最佳答案

为什么不在插入相应记录之前检查该行是否存在?

...
with open('c:\(project)\devices.list') as f:
content = f.readlines()
for line in content:
# distinguishing t_ for tables and f_ for fields
db_matching_entries = db(db.t_asdf.f_asdf==line).select()
if len(db_matching_entries) == 0:
db.t_asdf.insert(f_asdf = line)
else:
# here you could update your record, just in case ;-)
pass
db.commit() #<=========== Magic

有一个类似的过程,需要几秒钟才能完成 2k-3k 条目。你的时间不应该超过半分钟。

关于python - web2py 计划任务重新创建(重置)数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30789410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com