Spaces:
Running
Running
| import argparse | |
| import json | |
| import os | |
| import sqlite3 | |
| from contextlib import closing | |
| def execute_sql(db_path: str, sql: str): | |
| try: | |
| with closing(sqlite3.connect(db_path)) as conn: | |
| cursor = conn.cursor() | |
| cursor.execute(sql) | |
| rows = cursor.fetchall() | |
| return {"ok": True, "rows": rows, "error": None} | |
| except Exception as e: | |
| return {"ok": False, "rows": [], "error": str(e)} | |
| def main(): | |
| parser = argparse.ArgumentParser(description="Safely execute SQL against a Spider SQLite DB.") | |
| group = parser.add_mutually_exclusive_group(required=True) | |
| group.add_argument("--db_path", type=str, help="Path to SQLite database file") | |
| group.add_argument("--db_id", type=str, help="Spider database id (uses data/database/<db_id>/<db_id>.sqlite)") | |
| parser.add_argument("--sql", type=str, required=True, help="SQL to execute") | |
| args = parser.parse_args() | |
| project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| if args.db_path: | |
| db_path = args.db_path | |
| else: | |
| db_path = os.path.join(project_root, "data", "database", args.db_id, f"{args.db_id}.sqlite") | |
| result = execute_sql(db_path, args.sql) | |
| print(json.dumps(result, ensure_ascii=False, default=str)) | |
| if __name__ == "__main__": | |
| main() | |