# Solution to Database Migration Errors ## Problems ### "no such column: podcasts.tags" Error The application was encountering a SQLite error when accessing podcast pages: ``` sqlite3.OperationalError: no such column: podcasts.tags ``` This error occurred because the database schema was out of date and missing the `tags` column in the `podcasts` table. The column was added to the model in the code, but the migration to add it to the database hadn't been applied. ### "no such table: episodes" Error The application was also encountering an error when starting up: ``` Error running migration: no such table: episodes ``` This error occurred because the migration script was trying to modify the episodes table before it had been created. The migrations were being run during application startup, but before the database tables were created. ## Root Causes ### "no such column: podcasts.tags" Error This issue was caused by a combination of factors: 1. The `tags` column was added to the `Podcast` model in `app/models/podcast.py` 2. A migration script (`migrations/add_podcast_tags.py`) was created to add the column to the database 3. The migration script was included in `application.py` to run during application startup 4. However, the migration wasn't being applied to the database, possibly due to: - The application not being restarted after the migration was added - An import error in `init_db.py` preventing proper database initialization ### "no such table: episodes" Error This issue was caused by the order of operations in the application startup process: 1. The migration scripts were being run in `application.py` during the `create_app()` function 2. The database tables were being created in `main.py` after `create_app()` was called 3. This meant that migrations were trying to modify tables before they were created 4. Specifically, the `add_season_explicit_naming_format.py` migration was trying to add columns to the `episodes` table before it existed ## Solutions ### "no such column: podcasts.tags" Error The solution for this issue involved several components: 1. **Fixed Import Error**: Corrected the import statement in `init_db.py` to properly import `create_app` from `application.py` instead of from `app`. 2. **Created Migration Runner**: Developed a dedicated script (`run_migrations.py`) to run all migrations, ensuring the `tags` column is added to the database. 3. **Added Testing Tool**: Created a test script (`test_migration.py`) to verify if the `tags` column exists and offer to run the migration if needed. 4. **Documented the Process**: Created a comprehensive migration guide (`MIGRATION_GUIDE.md`) explaining how to resolve the issue and handle future migrations. 5. **Updated README**: Added information about the migration process to the README.md file, ensuring users are aware of how to handle database updates. ### "no such table: episodes" Error The solution for this issue involved changing the order of operations during application startup: 1. **Modified Database Initialization**: Updated `application.py` to create all database tables before running any migrations, ensuring that tables exist before migrations try to modify them. 2. **Removed Redundant Code**: Removed the redundant `db.create_all()` call from `main.py` since tables are now created in `application.py`. 3. **Improved Migration Handling**: Modified `application.py` to use a more robust approach for running migrations, similar to what's used in `init_db.py`. Now it dynamically discovers and runs all migration scripts in the `migrations` directory. 4. **Updated Documentation**: Updated the migration guide to include information about this error and how it was fixed. ## How to Use the Solution ### For the "no such column: podcasts.tags" Error If you encounter this error when accessing podcast pages: 1. Run the migration script: ``` python run_migrations.py ``` 2. Alternatively, you can test if the migration is needed: ``` python test_migration.py ``` 3. If you're still having issues, reinitialize the database: ``` python init_db.py ``` 4. Restart the application: ``` python main.py ``` ### For the "no such table: episodes" Error If you encounter this error when starting the application: 1. Update to the latest version of the application, which includes the fix for this issue. 2. If you're still experiencing the error, run the initialization script: ``` python init_db.py ``` 3. Restart the application: ``` python main.py ``` ## Preventing Similar Issues in the Future To prevent similar issues in the future: 1. Always run `python run_migrations.py` after pulling updates that might include database changes 2. Follow the guidelines in the Migration Guide when adding new database fields 3. Use the test script to verify database schema changes 4. Consider implementing a more robust migration system (like Alembic) for larger projects