【问题标题】:Flask background web scraping and database updatesFlask 后台网页抓取和数据库更新
【发布时间】:2024-04-25 14:05:02
【问题描述】:

我的 Flask 应用程序需要抓取另一个网页,以便每分钟左右更新一些数据库信息。所以我做了一个后台任务来完成这项工作,但不幸的是它似乎并没有真正修改数据库,默默地失败了。

我有一个如下所示的数据库连接:

config.py:

class Configuration(object):
    DATABASE = {
        'name': 'database.db',
        'engine': 'peewee.SqliteDatabase',
        'check_same_thread': False,
    }

__ 初始化 __.py:

import flask
app = flask.Flask(__name__)
from flask_peewee.db import Database

app.config.from_object('config.Configuration')
db = Database(app)

然后我在@app.route() 函数中读/写数据库条目。这是后台任务,scrape.py

from myapp import *
db.connect_db()
while True:
    #scrape and update the database with commands similar to:
    user = User.get(id=5)
    user.value += 1
    user.save()

当我将代码与我的其余视图一起放入时,该代码有效,例如:

@app.route("/scrape")
def scrape_update_db():
    user = User.get(id=5)
    user.value += 1
    user.save()
    return "Done"

然后定期将我的网络浏览器定向到 /scrape。所以我可以改为创建一个每分钟连接到http://localhost:80/scrape 的后台任务。但这似乎相当复杂,而且我认为它的计算效率不高(服务器在弱硬件上运行)或可维护。

如何在后台更新数据库条目?

【问题讨论】:

    标签: python database synchronization flask peewee


    【解决方案1】:

    好的,所以我的应用程序包含的代码会在数据库/表为空时自动创建。事实证明,Apache/WSGI 运行 Flask 应用程序的工作目录与我运行后台工作程序的工作目录不同。这导致工作程序应用程序创建自己的数据库,因此这两个应用程序实际上使用不同的数据库。

    所以解决方案是确保它们各自从同一个目录运行。

    【讨论】: