You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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;
  • 若之前已在public schema下生成了sessions表,可手动删除后重启应用,会自动在指定schema下生成新表
  • 可执行pip show flask-session查看当前安装的Flask-Session版本

内容的提问来源于stack exchange,提问作者Chandhan Narayanareddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:09:02