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
的后台任务。但这似乎相当复杂,我认为它不会在计算上有效(服务器在弱硬件上运行)或可维护。
如何在后台更新数据库条目?
答案 0 :(得分:1)
好的,所以我的应用程序包含自动创建数据库/表的代码(如果它是空的)。事实证明,Apache / WSGI从不同于我运行后台工作者的工作目录运行Flask应用程序。这导致worker应用程序创建自己的数据库,因此这两个应用程序实际上使用了不同的数据库。 / p>
因此,解决方案是确保它们各自从同一目录运行。