Skip to content

Commit c589d82

Browse files
feat(sqlalchemy): added option to support oracle database
pallets-eco#102
1 parent e7c91c9 commit c589d82

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

flask_session/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ def _get_interface(self, app):
9191
config.setdefault("SESSION_MONGODB_TZ_AWARE", False)
9292
config.setdefault("SESSION_SQLALCHEMY", None)
9393
config.setdefault("SESSION_SQLALCHEMY_TABLE", "sessions")
94+
config.setdefault("SESSION_SQLALCHEMY_SEQUENCE", None)
9495

9596
if config["SESSION_TYPE"] == "redis":
9697
session_interface = RedisSessionInterface(
@@ -134,6 +135,7 @@ def _get_interface(self, app):
134135
config["SESSION_KEY_PREFIX"],
135136
config["SESSION_USE_SIGNER"],
136137
config["SESSION_PERMANENT"],
138+
config["SESSION_SQLALCHEMY_SEQUENCE"],
137139
)
138140
else:
139141
session_interface = NullSessionInterface()

flask_session/sessions.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,16 @@ class SqlAlchemySessionInterface(SessionInterface):
562562
serializer = pickle
563563
session_class = SqlAlchemySession
564564

565-
def __init__(self, app, db, table, key_prefix, use_signer=False, permanent=True):
565+
def __init__(
566+
self,
567+
app,
568+
db,
569+
table,
570+
key_prefix,
571+
use_signer=False,
572+
permanent=True,
573+
sequence=None,
574+
):
566575
if db is None:
567576
from flask_sqlalchemy import SQLAlchemy
568577

@@ -571,12 +580,21 @@ def __init__(self, app, db, table, key_prefix, use_signer=False, permanent=True)
571580
self.key_prefix = key_prefix
572581
self.use_signer = use_signer
573582
self.permanent = permanent
583+
self.sequence = sequence
574584
self.has_same_site_capability = hasattr(self, "get_cookie_samesite")
575585

576586
class Session(self.db.Model):
577587
__tablename__ = table
578588

579-
id = self.db.Column(self.db.Integer, primary_key=True) # noqa: A003, VNE003
589+
if sequence:
590+
id = self.db.Column(
591+
self.db.Integer, self.db.Sequence(sequence), primary_key=True
592+
)
593+
else:
594+
id = self.db.Column(
595+
self.db.Integer, primary_key=True
596+
) # noqa: A003, VNE003
597+
580598
session_id = self.db.Column(self.db.String(255), unique=True)
581599
data = self.db.Column(self.db.LargeBinary)
582600
expiry = self.db.Column(self.db.DateTime)

0 commit comments

Comments
 (0)