Earlier quoted context omitted.
Which existing technologies did you look at and why didn't they fit your needs?
We looked at Alembic and our main issues were that 1. we don't have the entire database modeled into SQLAlchemy and we don't plan to 2. we have A LOT of views, triggers and functions and they are not very well supported by SQLAlchemy/Alembic (? I may be wrong)
Point 2 is indeed a big factor though. Alembic doesn’t have much first-class operation support beyond data storage constructs, and if most you need is op.execute() (which runs plain SQL) one might just as well build their own tool like you did.