Spaces:
Sleeping
Sleeping
| # db_connector.py | |
| import os | |
| import pandas as pd | |
| from sqlalchemy import create_engine, inspect | |
| SUPPORTED_ENGINES = ["PostgreSQL", "MySQL", "SQLite", "MSSQL", "Oracle"] | |
| def _env_to_uri(engine: str) -> str | None: | |
| """Build SQLAlchemy URI from env vars; return None if vars missing.""" | |
| match engine: | |
| case "PostgreSQL": | |
| host = os.getenv("PG_HOST"); port = os.getenv("PG_PORT", "5432") | |
| db = os.getenv("PG_DB"); user = os.getenv("PG_USER"); pw = os.getenv("PG_PW") | |
| if all([host, db, user, pw]): | |
| return f"postgresql://{user}:{pw}@{host}:{port}/{db}" | |
| case "MySQL": | |
| host = os.getenv("MYSQL_HOST"); port = os.getenv("MYSQL_PORT", "3306") | |
| db = os.getenv("MYSQL_DB"); user = os.getenv("MYSQL_USER"); pw = os.getenv("MYSQL_PW") | |
| if all([host, db, user, pw]): | |
| return f"mysql+mysqlconnector://{user}:{pw}@{host}:{port}/{db}" | |
| case "MSSQL": | |
| if os.getenv("MSSQL_CONN_STR"): | |
| return os.getenv("MSSQL_CONN_STR") | |
| # add Oracle, etc. | |
| return None | |
| def list_tables(conn_str: str): | |
| engine = create_engine(conn_str) | |
| return inspect(engine).get_table_names() | |
| def fetch_data_from_db(conn_str: str, table: str) -> str: | |
| engine = create_engine(conn_str) | |
| df = pd.read_sql_table(table, engine) | |
| tmp_path = os.path.join(tempfile.gettempdir(), f"{table}.csv") | |
| df.to_csv(tmp_path, index=False) | |
| return tmp_path | |
| def get_connection_string(engine: str, manual_input: str | None) -> str | None: | |
| """Prefer env‑vars; fallback to user input.""" | |
| auto = _env_to_uri(engine) | |
| return auto or manual_input | |