Python,Flask - 计算页面访问量并在数据库中写入

时间:2016-06-25 18:55:41

标签: python mysql flask

有一个小的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)

如何解决这个问题?我会很感激任何建议。

1 个答案:

答案 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)