create_table / drop_table implementation for MySQLMigrator and other engines
Peewee has a schema migrations module: http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#schema-migrations

I don't quite understand the issue, so I don't know what to tell you, but this doesn't seem to me a peewee-specific issue. I'm talking about same module.
It's not able to create/drop table by itself.
For now you can create or drop table only with existing model class. But how to do it when model is no longer exists?

Or i have to define model class in migration script every time? It's a huge crutch...
 I don't really understand the problem. If you have the model class, just import it into the migration and call `create_table()` - without the model definition Peewee has no idea what columns to add or anything. For dropping a table, I also don't see why this shouldn't be possible by using a model class imported from your app -- run the migration(s), then remove the model code.

You can also stub out a model class if all you need to do is drop it, or just run `database.execute_sql('DROP TABLE...')`.
It's a required functionality for cases when you have global schema changes,
Use case:
day 1: Model A. Dataset A
day 2: Model B. Dataset B
day 3: Model B updated. Dataset A patrially moved to model B
day 4: Model A is no longer needed and removed from code.

And i have to apply these changes on late environment that on  'day 1'

So, in this case it's impossible to use model's create and drop methods, because at the moment of migration run the old model will be already removed from code, but i have to apply all the changes in migrations.