首页 > 解决方案 > 使用 SQLAlchemy 和 Pyramid 计划的后台数据库更新

问题描述

我正在构建一个使用 SQLAlchemy 存储和检索数据的 Web 应用程序。我的目标是在应用程序不断运行时在后台按计划每天更新 SQLite 数据库。我目前的方法如下:

  1. SQLite 数据库首先从脚本初始化和构建:initializedb.py通过读取一系列文本文件并将适当的信息作为表中的行添加到数据库中
  2. 然后运行 ​​Pyramid 应用程序,并可通过以下方式访问localhost:6543
  3. 然后,用户可以访问从 SQLite 数据库读取的列表,使用 Jinja2 模板呈现

我的应用程序将持续 24/7 运行,以便用户可以随时访问此列表。因为我初始化数据库的文本文件在不断更新,所以我也希望能够每天更新数据库。我的主要问题是:

如何使用 SQLAlchemy 和 Pyramid 每天自动更新数据库?

定期更新数据库的代码应该在与应用程序分开运行的脚本上完成,还是应该在 Pyramid 代码本身中完成,例如在views.py?

标签: pythonsqlalchemypyramid

解决方案


使用 cron 安排常规任务

只需使用cron。每天运行一次初始化代码以重新创建数据库。

如果你需要更复杂,你可以使用celery 来做更高级的东西。但我认为cron将是最好的起点。

您应该将数据库设为主要数据库吗?

您应该尝试只拥有一份数据副本。听起来您有文本文件并将它们“导入”到数据库中。但听起来您的文本文件正在通过其他一些过程定期更新。

另一种方法是使数据库成为数据的规范版本。您可以在您的应用程序中创建一个管理界面来更新数据库。

如果数据是通过自动过程输入的,那么也许您可以创建一个导入脚本来获取新数据。

这可以通过命令行脚本来完成。只需将这种东西添加到您的setup.py

entry_points = """\
  [paste.app_factory]
  main = myapp:main
  [console_scripts]
  some_script = myapp.scripts.script:main
  another_script = myapp.any_module:some_function
  """

推荐阅读