长期使用网络收集的数据定期更新 Django DB -?

long runner to regularly update Django DB with web harvested data -?

我的 Django 项目有一个面向用户的站点,该站点很少将新对象插入用户数据库-table(以后会有数百个,也许数千个)。

此外,每天几次,我需要为我的所有对象查询外部网络服务 - 但速度很慢,以免违反他们的“每 10 秒 1 个请求”规则。所以这第二个任务是一个很长的 运行ner,我无法通过 urls.py 请求路由它。

因此,除了(uWSGI)服务器进程...我将在后台有第二个进程运行ning;它需要使用相同的数据库(使用默认的 sqlite3)。

万分感谢!
Whosebug 太棒了!

:-)

Django provides facilities 也用于编写命令行应用程序。通过这种方式,您可以访问与 Web 进程相同的所有内容,包括模型。

并发由您的数据库处理,而不是 django,因此您不必担心。如果您必须同时写入多条数据并且它们不能不同步,您可能唯一想使用的是 transactions

class Command(BaseCommand):
    def handle(self, *args, **kwargs):
        try:
            while True:
                self._fetch_data()
                time.sleep(10)
        except KeyboardInterrupt:
            pass

    def _fetch_data(self):
        data = ... # fetch data here
        MyModel.objects.create(foo=data.foo, bar=data.bar) # insert into db

假设上面的 class 在你的一个应用程序的 management/commands/mycommand.py 文件夹中,使用 manage.py:

执行它
python manage.py mycommand