2017-08-25 5 views
1

J'essaie d'activer des sessions côté serveur pour mon application flask en utilisant une base de données SQLite. Note J'utilise Flask-Sessionstore qui est un fork dur de Flask-Session et est maintenu plus activement. Cependant, j'obtiens la même erreur quand j'utilise les deux bibliothèques. Voici mon code pour app.py:flask-session: comment créer la table de 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) 

Quand je lance l'application avec python app.py tout commence et fonctionne comme prévu. Cependant, lorsque je tente d'accéder à la page d'index à http://127.0.0.1:5000 je reçois l'erreur suivante:

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

Il semble que je dois créer ce tableau avant d'exécuter l'application. Comment puis-je faire ceci? Ou est-ce que je manque une option de configuration qui crée la table pour moi si elle n'est pas trouvée?

Répondre

2

Vous devez fournir dans votre config app ainsi:

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

db est par exemple sqlalchemy. Donc, vous devriez avoir quelque chose comme:

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

Vous pouvez jeter un oeil à l'exemple de test de flask_sessionstore on github

+1

Je ne ai pas besoin les deux lignes de configuration, car ils sont déjà les valeurs par défaut. Cependant, cette dernière ligne 'session.app.session_interface.db.create_all()' est exactement ce que je cherchais merci! –