flask-session:如何创建会话表

时间:2017-08-25 18:11:47

标签: python sqlite session flask flask-sqlalchemy

我正在尝试使用SQLite数据库为我的烧瓶应用程序启用服务器端会话。注意我正在使用Flask-Sessionstore这是Flask-Session的硬分叉,并且更加积极地维护。但是,当我使用这两个库时,我遇到了同样的错误。这是我的app.py代码:

from flask import Flask, session
from flask_sqlalchemy import SQLAlchemy
from flask_sessionstore import Session

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////Users/Johnny/DBs/test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  # quiet warning message
app.config['SESSION_TYPE'] = 'sqlalchemy'
Session(app)

@app.route('/')
def index():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(debug=True)

当我使用python app.py运行应用程序时,一切都会按预期启动并运行。但是,当我尝试访问http://127.0.0.1:5000处的索引页面时,出现以下错误:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: sessions [SQL: 'SELECT sessions.id AS sessions_id, sessions.session_id AS sessions_session_id, sessions.data AS sessions_data, sessions.expiry AS sessions_expiry \nFROM sessions \nWHERE sessions.session_id = ?\n LIMIT ? OFFSET ?'] [parameters: ('session:xxx...', 1, 0)]

看来我需要在运行应用程序之前创建此表。我怎样才能做到这一点?或者我错过了一个配置选项,如果找不到它会为我创建表格吗?

2 个答案:

答案 0 :(得分:4)

您还需要在应用配置中提供此功能:

app.config[SESSION_SQLALCHEMY_TABLE] = 'sessions'
app.config[SESSION_SQLALCHEMY] = db

其中db是sqlAlchemy实例。所以你应该有类似的东西:

db = SQLAlchemy(app)
session = Session(app)
session.app.session_interface.db.create_all()

您可以查看 flask_sessionstore on github

的测试示例

答案 1 :(得分:0)

@Mekicha的答案有效,但是如果您已经拥有数据库并且不想运行db.create_all(),请考虑以下替代方法:

使用该应用初始化会话实例后,可以使用sqlalchemy接口来构建“会话”表(如果不存在):

SqlAlchemySessionInterface(app, db, "sessions", "sess_")

然后对数据库运行迁移。

有关完整示例,请参见此related post