Как мне получить доступ к методу, который находится внутри внутреннего класса Python? - PullRequest
0 голосов
/ 17 июня 2019

Я использую расширение flask-session для хранения пользовательских сессий в базе данных и сейчас пытаюсь запросить эту таблицу для получения сохраненных сессий. Таблица сеанса создается следующим образом:

SqlAlchemySessionInterface(app, db, table='Session', key_prefix='')

Теперь я хотел бы получить все записи, используя вызов запроса модели, как это,

Session.query.all()

Но я не могу этого сделать из-за того, что класс Session во внутреннем классе класса SqlAlchemySessionInterface. Есть идеи, как я могу сделать запрос к столу?

Полный код класса SqlAlchemySessionInterface, приведенный ниже,

class SqlAlchemySessionInterface(SessionInterface):

    serializer = pickle
    session_class = SqlAlchemySession

    def __init__(self, app, db, table, key_prefix, use_signer=False,
                 permanent=True):
        if db is None:
            from flask_sqlalchemy import SQLAlchemy
            db = SQLAlchemy(app)
        self.db = db
        self.key_prefix = key_prefix
        self.use_signer = use_signer
        self.permanent = permanent

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

            id = self.db.Column(self.db.Integer, primary_key=True)
            session_id = self.db.Column(self.db.String(255), unique=True)
            data = self.db.Column(self.db.LargeBinary)
            expiry = self.db.Column(self.db.DateTime)

            def __init__(self, session_id, data, expiry):
                self.session_id = session_id
                self.data = data
                self.expiry = expiry

            def __repr__(self):
                return '<Session data %s>' % self.data

        # self.db.create_all()
        self.sql_session_model = Session

1 Ответ

0 голосов
/ 17 июня 2019

В вашем коде должно быть from flask_session import Session и Session(app).

Привязать возвращаемый объект Session(app) к переменной, такой как sess.

Затем, session_model = sess._get_interface(app).sql_session_model.

Затем вы можете session_model.query.all().

Ключевой момент : посмотреть исходный код сеанса.

...