Все очень плохо с peewee-async. К сожалению очень криво с боку прибито к пиви, и половина фич не работает толком, даже транзакции работают кое как.
Сейчас испльзую aiopg + sqlalchemy core, без моделей тяжело, но жить можно.
По сути, нормального ORM поверх asyncio еще не завезли, как я понимаю. Все текущие ORM принципиально синхронные, в т.ч. работают поверх геттеров-сеттеров, для которых в питоне async нет
ТС, gino без особых проблем работает асинхронно, для этого у него все есть. Собственно, он для этого и предназначен. Работает он как раз через asyncpg, считая его «диалектом» (диалект, точнее «driver of dialect» - это термин SQLAlchemy).
Но вот механизма миграций у него из коробки действительно нет. Его автор правда предлагает использовать alembic, но тему не развивает. Между тем, тут есть некий подводный камешек - alembic заставить работать асинхронно... нет, может и можно, но очень сложно. Мне лично этот подвиг не удался. Но на самом деле это и не нужно, так как для alembic вполне можно вместо диалекта postgresql+asyncpg указать в строке соединения с БД postgresql и спокойно выполнить все миграции синхронно. Правда, в этом случае потребуется дополнительно установить низкоуровневую библиотеку psycopg2-binary.