flask-session:如何创建会话表

Joh*_*etz 1 python sqlite session flask flask-sqlalchemy

我正在尝试使用SQLite数据库为我的flask应用程序启用服务器端会话。注意我使用的是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)
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,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)]
Run Code Online (Sandbox Code Playgroud)

看来我需要在运行应用程序之前创建此表。我怎样才能做到这一点?还是我找不到一个配置选项,如果找不到该选项,该配置选项会为我创建表?

Mek*_*cha 5

您还需要在您的应用配置中提供此设置:

app.config[SESSION_SQLALCHEMY_TABLE] = 'sessions'
app.config[SESSION_SQLALCHEMY] = db
Run Code Online (Sandbox Code Playgroud)

dbsqlAlchemy实例在哪里。因此,您应该具有以下内容:

db = SQLAlchemy(app)
session = Session(app)
session.app.session_interface.db.create_all()
Run Code Online (Sandbox Code Playgroud)

您可以在github查看flask_sessionstore的测试示例

  • 我不需要两条配置行,因为它们已经是默认值。但是,最后一行`session.app.session_interface.db.create_all()`正是我想要的东西! (2认同)