sqlalchemy, обновление строки из класса с таблицей

У меня есть класс User:

class User(db_session.SqlAlchemyBase, UserMixin, SerializerMixin):
    __tablename__ = 'users'

    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)
    public_id = sqlalchemy.Column(sqlalchemy.String, unique=True)

    name = sqlalchemy.Column(sqlalchemy.String, unique=True)
    email = sqlalchemy.Column(sqlalchemy.String, index=True, unique=True)
    password = sqlalchemy.Column(sqlalchemy.String, nullable=True)
    created_date = sqlalchemy.Column(sqlalchemy.DateTime, default=datetime.now)
    admin = sqlalchemy.Column(sqlalchemy.BOOLEAN, default=False)

    token = sqlalchemy.Column(sqlalchemy.String(32), index=True, unique=True)
    token_expiration = sqlalchemy.Column(sqlalchemy.DateTime)

    def get_token(self, expires_in=3600):
        db_sess = db_session.create_session()
        now = datetime.utcnow()
        if self.token and self.token_expiration > now + timedelta(seconds=60):
            return self.token
        self.token = base64.b64encode(os.urandom(24)).decode('utf-8')
        self.token_expiration = now + timedelta(seconds=expires_in)
        db_sess.commit()

        return self.token

    @staticmethod
    def check_token(token):
        db_sess = db_session.create_session()
        user = db_sess.query(User).filter(User.token == token).first()
        if user is None or user.token_expiration < datetime.utcnow():
            return None
        return user

строка db_sess = db_session.create_session() создает объект подключения. Проблема: Когда я вызываю метод get_token в первый раз (ну или по истечению его срока годности), то db_sess.commit() не сохраняет изменения в строке пользователя. Причем раньше там также стоял и работал db_sess.add(self), но теперь он вылетает с ошибкой о том, что не соблюдается уникальность некоторых ячеек (не токенов, так как у меня только один пользователь в базе).

Есть ли какой способ обновлять данные из самого класса?


Ответы (0 шт):