diff options
Diffstat (limited to 'src/database/__init__.py')
-rw-r--r-- | src/database/__init__.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/database/__init__.py b/src/database/__init__.py new file mode 100644 index 0000000..c1e2295 --- /dev/null +++ b/src/database/__init__.py @@ -0,0 +1,33 @@ +from datetime import datetime, timezone +from flask_migrate import Migrate +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy.orm import DeclarativeBase, MappedAsDataclass, Mapper +from sqlalchemy import event, update + +class Base(DeclarativeBase, MappedAsDataclass): + pass + +db = SQLAlchemy(model_class=Base) + +def init_db(app): + migrate = Migrate(app, db) + db.init_app(app) + +@event.listens_for(Mapper, 'after_insert') +def insert_created_and_updated_at_columns(mapper, connection, target): + set_timestamps = ( + update(mapper.local_table). + where(mapper.local_table.c.id == target.id). + values(created_at=datetime.now(timezone.utc), + updated_at=datetime.now(timezone.utc)) + ) + connection.execute(set_timestamps) + +@event.listens_for(Mapper, 'before_update') +def set_updated_at_timestamp(mapper, connection, target): + set_updated_at = ( + update(mapper.local_table). + where(mapper.local_table.c.id == target.id). + values(updated_at=datetime.now(timezone.utc)) + ) + connection.execute(set_updated_at) |