Spaces:
Sleeping
Sleeping
Update db_connector.py
Browse files- db_connector.py +33 -9
db_connector.py
CHANGED
|
@@ -1,17 +1,41 @@
|
|
| 1 |
-
|
|
|
|
| 2 |
import pandas as pd
|
| 3 |
from sqlalchemy import create_engine, inspect
|
| 4 |
|
| 5 |
-
SUPPORTED_ENGINES = ["
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
-
def list_tables(conn_str):
|
| 8 |
engine = create_engine(conn_str)
|
| 9 |
-
|
| 10 |
-
return inspector.get_table_names()
|
| 11 |
|
| 12 |
-
def fetch_data_from_db(conn_str, table):
|
| 13 |
engine = create_engine(conn_str)
|
| 14 |
df = pd.read_sql_table(table, engine)
|
| 15 |
-
|
| 16 |
-
df.to_csv(
|
| 17 |
-
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# db_connector.py
|
| 2 |
+
import os
|
| 3 |
import pandas as pd
|
| 4 |
from sqlalchemy import create_engine, inspect
|
| 5 |
|
| 6 |
+
SUPPORTED_ENGINES = ["PostgreSQL", "MySQL", "SQLite", "MSSQL", "Oracle"]
|
| 7 |
+
|
| 8 |
+
def _env_to_uri(engine: str) -> str | None:
|
| 9 |
+
"""Build SQLAlchemy URI from env vars; return None if vars missing."""
|
| 10 |
+
match engine:
|
| 11 |
+
case "PostgreSQL":
|
| 12 |
+
host = os.getenv("PG_HOST"); port = os.getenv("PG_PORT", "5432")
|
| 13 |
+
db = os.getenv("PG_DB"); user = os.getenv("PG_USER"); pw = os.getenv("PG_PW")
|
| 14 |
+
if all([host, db, user, pw]):
|
| 15 |
+
return f"postgresql://{user}:{pw}@{host}:{port}/{db}"
|
| 16 |
+
case "MySQL":
|
| 17 |
+
host = os.getenv("MYSQL_HOST"); port = os.getenv("MYSQL_PORT", "3306")
|
| 18 |
+
db = os.getenv("MYSQL_DB"); user = os.getenv("MYSQL_USER"); pw = os.getenv("MYSQL_PW")
|
| 19 |
+
if all([host, db, user, pw]):
|
| 20 |
+
return f"mysql+mysqlconnector://{user}:{pw}@{host}:{port}/{db}"
|
| 21 |
+
case "MSSQL":
|
| 22 |
+
if os.getenv("MSSQL_CONN_STR"):
|
| 23 |
+
return os.getenv("MSSQL_CONN_STR")
|
| 24 |
+
# add Oracle, etc.
|
| 25 |
+
return None
|
| 26 |
|
| 27 |
+
def list_tables(conn_str: str):
|
| 28 |
engine = create_engine(conn_str)
|
| 29 |
+
return inspect(engine).get_table_names()
|
|
|
|
| 30 |
|
| 31 |
+
def fetch_data_from_db(conn_str: str, table: str) -> str:
|
| 32 |
engine = create_engine(conn_str)
|
| 33 |
df = pd.read_sql_table(table, engine)
|
| 34 |
+
tmp_path = os.path.join(tempfile.gettempdir(), f"{table}.csv")
|
| 35 |
+
df.to_csv(tmp_path, index=False)
|
| 36 |
+
return tmp_path
|
| 37 |
+
|
| 38 |
+
def get_connection_string(engine: str, manual_input: str | None) -> str | None:
|
| 39 |
+
"""Prefer env‑vars; fallback to user input."""
|
| 40 |
+
auto = _env_to_uri(engine)
|
| 41 |
+
return auto or manual_input
|