Python flask会话:如何创建会话表

Python flask会话:如何创建会话表,python,sqlite,session,flask,flask-sqlalchemy,Python,Sqlite,Session,Flask,Flask Sqlalchemy,我正在尝试使用SQLite数据库为我的flask应用程序启用服务器端会话。注意,我使用的是一个硬叉,并且更积极地维护。然而,当我使用这两个库时,我得到了相同的错误。这是我的app.py代码: from flask import Flask, session from flask_sqlalchemy import SQLAlchemy from flask_sessionstore import Session app = Flask(__name__) app.config['SQLALCH

我正在尝试使用SQLite数据库为我的flask应用程序启用服务器端会话。注意,我使用的是一个硬叉,并且更积极地维护。然而,当我使用这两个库时,我得到了相同的错误。这是我的
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
运行应用程序时,一切都会按预期启动和运行。但是,当我尝试在访问索引页时,我得到以下错误:

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)]

在运行应用程序之前,我似乎需要创建此表。我该怎么做?或者,如果找不到为我创建表的配置选项,我是否缺少该选项?

您还需要在应用程序配置中提供该选项:

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()

您可以查看< /p> < p>的测试示例:@ Mekicha的工作原理,但是如果您已经有了数据库,不想运行<代码> db .CREATEYAL()/<代码>,请考虑这个备选方案:

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

SqlAlchemySessionInterface(app, db, "sessions", "sess_")
然后对数据库运行迁移


查看此完整示例

我不需要这两个配置行,因为它们已经是默认值。然而,最后一行
session.app.session\u interface.db.create\u all()
正是我想要的,谢谢!如果你在2019年偶然发现这个问题:Flask Session的链接github网站说它不再被维护。2020年7月更新。似乎又是最新的,这个github回购最近更新了。希望这有帮助。是的,如果您直接使用alembic玩迁移。将此行添加到alembic/env.py允许在自动生成迁移之前在db.metadata中注册会话表