1

私のFlaskアプリケーションは、データベース情報を毎分更新するために、別のWebページをスクレイピングする必要があります。そのため、このジョブを実行するバックグラウンド タスクを作成しましたが、残念ながら、実際にはデータベースを変更していないようで、サイレントに失敗します。

次のようなデータベース接続があります。

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"

そして、定期的に Web ブラウザを /scrape に誘導します。http://localhost:80/scrapeそのため、代わりに毎分接続するバックグラウンド タスクを作成できます。しかし、これはかなり複雑に思えます。また、計算効率が悪く (サーバーが弱いハードウェアで実行されている)、保守性も低いと思います。

バックグラウンドでデータベース エントリを更新するにはどうすればよいですか?

4

1 に答える 1