如何在Flask Session中设置PostgreSQL数据库的schema名称
解决方法
方法1:使用官方配置项(推荐,适用于Flask-Session v0.5.0及以上版本)
Flask-Session 从v0.5.0版本开始新增了SESSION_SQLALCHEMY_SCHEMA配置项,直接指定即可完成schema设置,修改后的代码如下:
from datetime import timedelta from flask import Flask from flask_cors import CORS from flask_session import Session def create_app(): app = Flask(__name__) cors = CORS(app, resources={r"/*": {"origins": "http://localhost:8080/"}}) app.config['SESSION_TYPE'] = 'sqlalchemy' app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:password@localhost:5432/database' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config["SESSION_SQLALCHEMY_TABLE"] = "sessions" # 新增这一行,替换为你实际的schema名称 app.config["SESSION_SQLALCHEMY_SCHEMA"] = "your_schema_name" app.config["SESSION_COOKIE_SECURE"] = True app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(seconds=50) session = Session(app) session.app.session_interface.db.create_all() return app
方法2:自定义Session模型(适用于Flask-Session v0.5.0以下的旧版本)
如果你的Flask-Session版本较低不支持上述配置项,可以通过自定义Session模型指定schema,代码示例如下:
from datetime import timedelta from flask import Flask from flask_cors import CORS from flask_session import Session from flask_sqlalchemy import SQLAlchemy from flask_session.sessions import SqlAlchemySession db = SQLAlchemy() # 自定义Session模型,指定schema class CustomSession(SqlAlchemySession, db.Model): __tablename__ = 'sessions' # 这里指定你的schema名称 __table_args__ = {'schema': 'your_schema_name'} def create_app(): app = Flask(__name__) cors = CORS(app, resources={r"/*": {"origins": "http://localhost:8080/"}}) app.config['SESSION_TYPE'] = 'sqlalchemy' app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:password@localhost:5432/database' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 指定使用自定义的Session模型 app.config["SESSION_SQLALCHEMY_MODEL"] = CustomSession app.config["SESSION_COOKIE_SECURE"] = True app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(seconds=50) db.init_app(app) session = Session(app) with app.app_context(): db.create_all() return app
注意事项
- 提前在PostgreSQL中创建目标schema,可执行SQL:
CREATE SCHEMA IF NOT EXISTS your_schema_name; - 若之前已在
publicschema下生成了sessions表,可手动删除后重启应用,会自动在指定schema下生成新表 - 可执行
pip show flask-session查看当前安装的Flask-Session版本
内容的提问来源于stack exchange,提问作者Chandhan Narayanareddy
相关产品推荐
相关产品推荐

