在运行时为 SQLAlchemy 的 `EncryptedType` 指定一个密钥

Joh*_*man 2 sqlalchemy sqlalchemy-utils

列类型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'))
Run Code Online (Sandbox Code Playgroud)

但是如果我在定义User类之前不知道密钥是什么怎么办?例如,如果我想提示用户输入密钥怎么办?

Sup*_*oot 5

这是您链接到的文档中的最后一个示例:

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))
Run Code Online (Sandbox Code Playgroud)