When it comes to autogeneration database migration files, I like the Django approach. Django compares migrations with model definitions and generates migration files, it is well described in this post.
Alembic migration autogeneration is based on a comparison of table metadata in the application and actual database state. In other words, you need to have a database with the actual state to detect changes in model definitions. It’s not convenient, but there is a workaround that will make it more Django-like.