First Check
Commit to Help
Example Code
import os
from typing import Optional
import sqlalchemy
from sqlalchemy import Column
from sqlalchemy_utils import EncryptedType
from sqlalchemy_utils.types.encrypted.encrypted_type import AesEngine
from sqlmodel import create_engine, Field, Session, SQLModel
# https://sqlalchemy-utils.readthedocs.io/en/latest/_modules/sqlalchemy_utils/types/encrypted/encrypted_type.html#EncryptedType
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
# Because the secret name should stay a secret
secret_name: str = Field(
sa_column=Column(
EncryptedType(
sqlalchemy.Unicode,
os.getenv('ENCRYPTION_KEY'),
AesEngine,
'pkcs5'
)
)
)
age: Optional[int] = None
sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"
engine = create_engine(sqlite_url, echo=True)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
def create_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) #
with Session(engine) as session: #
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) #
def main():
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