私の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
そのため、代わりに毎分接続するバックグラウンド タスクを作成できます。しかし、これはかなり複雑に思えます。また、計算効率が悪く (サーバーが弱いハードウェアで実行されている)、保守性も低いと思います。
バックグラウンドでデータベース エントリを更新するにはどうすればよいですか?