Указание ключа для SQLAlchemy `EncryptedType` во время выполнения

Документация по SQLAlchemy-Utils для EncryptedType Тип столбца имеет пример, который выглядит примерно так:

secret_key = 'secretkey1234'
# setup
engine = create_engine('sqlite:///:memory:')
connection = engine.connect()
Base = declarative_base()


class User(Base):
    __tablename__ = "user"
    id = sa.Column(sa.Integer, primary_key=True)
    username = sa.Column(EncryptedType(sa.Unicode,
                                       secret_key,
                                       AesEngine,
                                       'pkcs5'))

Но что, если я не знаю, что такое секретный ключ, прежде чем определить User учебный класс? Например, что если я хочу предложить пользователю ввести секретный ключ?

1 ответ

Решение

Это последний пример в документах, на которые вы ссылались:

Параметр key принимает вызываемую функцию, позволяющую изменять ключ для каждой строки вместо фиксированной для всей таблицы.

def get_key():
    return 'dynamic-key'

class User(Base):
    __tablename__ = 'user'
    id = sa.Column(sa.Integer, primary_key=True)
    username = sa.Column(EncryptedType(
        sa.Unicode, get_key))
Другие вопросы по тегам