1

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

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

配置文件:

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每一分钟的后台任务。但这似乎相当复杂,我认为它的计算效率不高(服务器在弱硬件上运行)或可维护。

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

4

1 回答 1

1

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

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

于 2013-06-20T12:14:38.117 回答