2017-08-25 1 views
1

Ich versuche serverseitige Sitzungen für meine Kolben-Anwendung mit einer SQLite-Datenbank zu aktivieren. Hinweis: Ich verwende Flask-Sessionstore, die eine harte Gabel von Flask-Session ist und mehr aktiv beibehalten wird. Ich bekomme jedoch den gleichen Fehler, wenn ich beide Bibliotheken verwende. Hier ist mein Code für app.py:flask-session: wie man die Sitzungstabelle erstellt

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) 

Wenn ich die Anwendung mit python app.py alles anspringt und läuft laufen wie erwartet. Allerdings, wenn ich versuche, die Indexseite auf http://127.0.0.1:5000 zuzugreifen bekomme ich folgende Fehlermeldung:

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

Es scheint, ich brauche diese Tabelle zu erstellen, bevor die Anwendung ausgeführt wird. Wie kann ich das machen? Oder fehlt mir eine Konfigurationsoption, die die Tabelle für mich erstellt, wenn sie nicht gefunden wird?

Antwort

2

Sie müssen dies in Ihrer Anwendung Config bieten auch:

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

wo db sqlalchemy Instanz ist. Sie sollten also so etwas wie haben:

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

Sie einen Blick auf das Testbeispiel von flask_sessionstore on github nehmen

+1

Ich brauche nicht die beiden Konfigurations Linien, weil sie bereits die Standardwerte. Die letzte Zeile 'session.app.session_interface.db.create_all()' ist genau das, wonach ich gesucht habe, danke! –

Verwandte Themen