2017-08-25 77 views
1

我试图使用SQLite数据库为我的烧瓶应用程序启用服务器端会话。注意我使用的是Flask-Sessionstore,这是Flask-Session的硬分支,并且更加主动地维护。但是,当我使用这两个库时,我遇到了同样的错误。这里是我的app.py代码:flask-session:如何创建会话表

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

你需要在你的应用程序配置提供了这个问题,以及:

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

测试例子来看看我不需要两个配置线,因为他们已经是默认值。但是,最后一行'session.app.session_interface.db.create_all()'正是我在寻找的谢谢! –