bootstrap.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """Create tables and seed MySQL from sql/init_db.sql when the user table is empty."""
  2. import os
  3. import subprocess
  4. import sys
  5. from app import create_app
  6. from app.models import User, db
  7. def main() -> None:
  8. app = create_app()
  9. with app.app_context():
  10. db.create_all()
  11. if User.query.count() > 0:
  12. print("Database already initialized, skipping seed.")
  13. return
  14. sql_path = os.path.join(os.getcwd(), "sql", "init_db.sql")
  15. if not os.path.isfile(sql_path):
  16. print(f"Seed file not found: {sql_path}", file=sys.stderr)
  17. sys.exit(1)
  18. host = os.environ["MYSQL_HOST"]
  19. port = os.environ.get("MYSQL_PORT", "3306")
  20. user = os.environ["MYSQL_USER"]
  21. password = os.environ["MYSQL_PASSWORD"]
  22. database = os.environ["MYSQL_DATABASE"]
  23. cmd = [
  24. "mysql",
  25. "--default-character-set=utf8mb4",
  26. f"-h{host}",
  27. f"-P{port}",
  28. f"-u{user}",
  29. f"-p{password}",
  30. database,
  31. ]
  32. print("Seeding database from sql/init_db.sql ...")
  33. with open(sql_path, "rb") as f:
  34. subprocess.run(cmd, stdin=f, check=True)
  35. print("Seed completed.")
  36. if __name__ == "__main__":
  37. main()