First Check
Commit to Help
Example Code
importosfromtypingimportOptionalimportsqlalchemyfromsqlalchemyimportColumnfromsqlalchemy_utilsimportEncryptedTypefromsqlalchemy_utils.types.encrypted.encrypted_typeimportAesEnginefromsqlmodelimportcreate_engine, Field, Session, SQLModel# https://sqlalchemy-utils.readthedocs.io/en/latest/_modules/sqlalchemy_utils/types/encrypted/encrypted_type.html#EncryptedTypeclassHero(SQLModel, table=True):
id: Optional[int] =Field(default=None, primary_key=True)
name: str# Because the secret name should stay a secretsecret_name: str=Field(
sa_column=Column(
EncryptedType(
sqlalchemy.Unicode,
os.getenv('ENCRYPTION_KEY'),
AesEngine,
'pkcs5'
)
)
)
age: Optional[int] =Nonesqlite_file_name="database.db"sqlite_url=f"sqlite:///{sqlite_file_name}"engine=create_engine(sqlite_url, echo=True)
defcreate_db_and_tables():
SQLModel.metadata.create_all(engine)
defcreate_heroes():
hero_1=Hero(name="Deadpond", secret_name="Dive Wilson") #hero_2=Hero(name="Spider-Boy", secret_name="Pedro Parqueador") #hero_3=Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48) #print("Before interacting with the database") #print("Hero 1:", hero_1) #print("Hero 2:", hero_2) #print("Hero 3:", hero_3) #withSession(engine) assession: #session.add(hero_1) #session.add(hero_2) #session.add(hero_3) #print("After adding to the session") #print("Hero 1:", hero_1) #print("Hero 2:", hero_2) #print("Hero 3:", hero_3) #session.commit() #print("After committing the session") #print("Hero 1:", hero_1) #print("Hero 2:", hero_2) #print("Hero 3:", hero_3) #print("After committing the session, show IDs") #print("Hero 1 ID:", hero_1.id) #print("Hero 2 ID:", hero_2.id) #print("Hero 3 ID:", hero_3.id) #print("After committing the session, show names") #print("Hero 1 name:", hero_1.name) #print("Hero 2 name:", hero_2.name) #print("Hero 3 name:", hero_3.name) #session.refresh(hero_1) #session.refresh(hero_2) #session.refresh(hero_3) #print("After refreshing the heroes") #print("Hero 1:", hero_1) #print("Hero 2:", hero_2) #print("Hero 3:", hero_3) ##print("After the session closes") #print("Hero 1:", hero_1) #print("Hero 2:", hero_2) #print("Hero 3:", hero_3) #defmain():
create_db_and_tables()
create_heroes()
if__name__=="__main__":
main()Description
This code is already working as is!
I did not find a tutorial for SLQModel on how to encrypt / decrypt data. I also thought of opening a PR to add this to the docu but as this approach uses a separate package (sqlalchemy_utils) for the column type EncryptedType I wanted to ask beforehand if that is wanted.
Operating System
Linux
Operating System Details
No response
SQLModel Version
0.0.8
Python Version
3.10.4
Additional Context
No response
First Check
Commit to Help
Example Code
Description
This code is already working as is!
I did not find a tutorial for SLQModel on how to encrypt / decrypt data. I also thought of opening a PR to add this to the docu but as this approach uses a separate package (sqlalchemy_utils) for the column type EncryptedType I wanted to ask beforehand if that is wanted.
Operating System
Linux
Operating System Details
No response
SQLModel Version
0.0.8
Python Version
3.10.4
Additional Context
No response