烧瓶背景网络抓取和数据库更新

时间:2013-06-20 11:03:48

标签: python database synchronization flask peewee

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

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

config.py:

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

__ init __。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"

然后定期将我的webbrowser指向/ scrape。所以我可以改为每分钟连接到http://localhost:80/scrape的后台任务。但这似乎相当复杂,我认为它不会在计算上有效(服务器在弱硬件上运行)或可维护。

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

1 个答案:

答案 0 :(得分:1)

好的,所以我的应用程序包含自动创建数据库/表的代码(如果它是空的)。事实证明,Apache / WSGI从不同于我运行后台工作者的工作目录运行Flask应用程序。这导致worker应用程序创建自己的数据库,因此这两个应用程序实际上使用了不同的数据库。 / p>

因此,解决方案是确保它们各自从同一目录运行。