{"library":"peewee-migrate","title":"Peewee Migrate","description":"Peewee-migrate, currently at version 1.15.0, provides robust database migration support for the Peewee ORM. It enables developers to manage schema changes through versioned migrations, offering features like creation, application, and rollback of migrations. The library is actively maintained on GitHub with a regular release cadence, ensuring compatibility and ongoing improvements for Peewee projects.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install peewee-migrate"],"cli":{"name":"pw_migrate","version":"Usage: pw_migrate [OPTIONS] COMMAND [ARGS]..."}},"imports":["from peewee_migrate import Router"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom peewee import *\nfrom peewee_migrate import Router\n\n# 1. Initialize a Peewee database instance\ndb = SqliteDatabase('example.db')\n\n# 2. Define the directory where your migration files are stored\nmigrations_dir = 'my_migrations'\n\n# Create a dummy migration directory and file for the example to be runnable\nos.makedirs(migrations_dir, exist_ok=True)\nwith open(os.path.join(migrations_dir, '001_initial.py'), 'w') as f:\n    f.write('from peewee import *\\ndef migrate(migrator, database, **kwargs):\\n    pass\\ndef rollback(migrator, database, **kwargs):\\n    pass')\n\n# 3. Initialize the Peewee-Migrate Router\nrouter = Router(db, migrate_dir=migrations_dir)\n\n# 4. Run all pending migrations\n# In a real scenario, you would have migration files in 'my_migrations'\n# defining schema changes.\nprint(\"Running migrations...\")\nrouter.run()\nprint(\"Migrations completed successfully.\")\n\n# Clean up created files/dirs for a repeatable example\nif os.path.exists('example.db'):\n    os.remove('example.db')\nif os.path.exists(migrations_dir):\n    import shutil\n    shutil.rmtree(migrations_dir)","lang":"python","description":"This quickstart demonstrates how to initialize the `Router` with a Peewee database and run migrations. It sets up a dummy migration directory and file for the example to be runnable. In a real application, you would create migration files using `router.create()` and then manually define your schema changes within them.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"1.13.0","pypi_latest":"1.15.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.8,"avg_import_s":0.44,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.29,"mem_mb":8.5,"disk_size":"20.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.21,"mem_mb":8.5,"disk_size":"20M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.45,"mem_mb":10.1,"disk_size":"22.4M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.39,"mem_mb":10.1,"disk_size":"23M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.66,"mem_mb":10.2,"disk_size":"14.1M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.7,"import_time_s":0.6,"mem_mb":10.2,"disk_size":"15M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.7,"mem_mb":10.5,"disk_size":"13.9M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":1.8,"import_time_s":0.61,"mem_mb":10.5,"disk_size":"14M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.3,"mem_mb":8.5,"disk_size":"21.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"peewee-migrate","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2,"import_time_s":0.23,"mem_mb":8.5,"disk_size":"22M"}]}}