Local changes: Updated model training, removed debug instrumentation, and configuration improvements
This commit is contained in:
68
scripts/reset_database.py
Normal file
68
scripts/reset_database.py
Normal file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Reset database to a fresh state by dropping all tables and recreating them."""
|
||||
|
||||
import asyncio
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Add project root to path
|
||||
project_root = Path(__file__).parent.parent
|
||||
if str(project_root) not in sys.path:
|
||||
sys.path.insert(0, str(project_root))
|
||||
|
||||
from sqlalchemy import text
|
||||
from src.core.database import Base, Database
|
||||
from src.core.config import get_config
|
||||
|
||||
|
||||
async def reset_database():
|
||||
"""Reset database by dropping all tables and recreating them."""
|
||||
config = get_config()
|
||||
db_type = config.get("database.type", "postgresql")
|
||||
|
||||
print(f"Resetting {db_type} database...")
|
||||
|
||||
# Create database instance to get engine
|
||||
db = Database()
|
||||
|
||||
try:
|
||||
# Drop all tables
|
||||
# For PostgreSQL, we need to handle foreign key constraints
|
||||
print("Dropping all tables...")
|
||||
async with db.engine.begin() as conn:
|
||||
# Disable multiple statements in one call caution, but reset logic usually needs strict control.
|
||||
# However, asyncpg doesn't support "SET session_replication_role" easily within a transaction block
|
||||
# if it's not a superuser or specific config.
|
||||
# Instead, we will use CASCADE drop which is cleaner for full reset.
|
||||
|
||||
# Use reflection to find tables is harder in async.
|
||||
# We will just drop all tables using CASCADE via raw SQL or metadata.
|
||||
|
||||
# Since we are using async engine, we need to utilize run_sync for metadata operations
|
||||
# But drop_all doesn't support CASCADE automatically for all dialects in the way we might want
|
||||
# if using pure SQLAlchemy metadata.drop_all.
|
||||
|
||||
# Let's try the standard metadata.drop_all first
|
||||
await conn.run_sync(Base.metadata.drop_all)
|
||||
|
||||
print("Dropped all tables.")
|
||||
|
||||
# Recreate all tables
|
||||
print("Recreating all tables...")
|
||||
await db.create_tables()
|
||||
print("Database reset complete!")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error during reset: {e}")
|
||||
raise
|
||||
finally:
|
||||
# Close database connection
|
||||
await db.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
asyncio.run(reset_database())
|
||||
except Exception as e:
|
||||
print(f"Error resetting database: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
Reference in New Issue
Block a user