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), но теперь он вылетает с ошибкой о том, что не соблюдается уникальность некоторых ячеек (не токенов, так как у меня только один пользователь в базе).
Есть ли какой способ обновлять данные из самого класса?