有一个小的hello world Flask有访问统计数据。我设法用redis计算访问量,但我还必须添加支持存储MySQL数据库中的访问日期和访问次数。目前的代码是: 我试图访问以前创建的数据库。 目前我不知道如何在MySQL中存储这样的信息。
我试图访问以前创建的数据库。 目前我不知道如何在MySQL中存储这样的信息。
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host="redis")
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'user'
app.config['MYSQL_DATABASE_PASSWORD'] = 'passwd'
app.config['MYSQL_DATABASE_DB'] = 'hello'
app.config['MYSQL_DATABASE_HOST'] = 'mysql'
mysql.init_app(app)
@app.route("/")
def hello():
visits = redis.incr('counter')
html = "<h3>Hello, world!</h3>" \
"<b>Visits:</b> {visits}" \
"<br/>"
return html.format(visits=visits)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=80)
如何解决这个问题?我会很感激任何建议。
答案 0 :(得分:0)
查看Flask-SQLAlchemy: http://flask-sqlalchemy.pocoo.org/2.1/quickstart/#a-minimal-application
您需要使用
创建数据库from yourapplication import db
db.create_all()
如果还没有,我会设置一个检查来创建计数器,但这是一个不必要的步骤。
这是一个使用SQLite3的工作应用程序。如果您确实需要MySQL,可以修改SQLALCHEMY_DATABASE_URI,如下所示: Switching from SQLite to MySQL with Flask SQLAlchemy 但是,根据我的拙见,这种做法有点过分。
from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class Visit(db.Model):
id = db.Column(db.Integer, primary_key=True)
count = db.Column(db.Integer)
def __init__(self):
self.count = 0
@app.route("/")
def hello():
v = Visit.query.first()
if not v:
v = Visit()
v.count += 1
db.session.add(v)
v.count +=1
db.session.commit()
return jsonify(counter=v.count)
if __name__ == "__main__":
app.run(debug=True)