Skip to content

Commit 437f949

Browse files
authored
fix[output_format]: accept dataframe dict as output and secure sql qu… (#1432)
* fix[output_format]: accept dataframe dict as output and secure sql query execution * fix: ruff errors
1 parent 719043c commit 437f949

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

pandasai/connectors/sql.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ def execute_direct_sql_query(self, sql_query):
441441
if not self._is_sql_query_safe(sql_query):
442442
raise MaliciousQueryError("Malicious query is generated in code")
443443

444-
return pd.read_sql(sql_query, self._connection)
444+
return pd.read_sql(text(sql_query), self._connection)
445445

446446
@property
447447
def cs_table_name(self):

pandasai/helpers/output_validator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def validate_value(self, expected_type: str) -> bool:
5656
elif expected_type == "string":
5757
return isinstance(self, str)
5858
elif expected_type == "dataframe":
59-
return isinstance(self, (pd.DataFrame, pd.Series))
59+
return isinstance(self, (pd.DataFrame, pd.Series, dict))
6060
elif expected_type == "plot":
6161
if not isinstance(self, (str, dict)):
6262
return False
@@ -82,7 +82,7 @@ def validate_result(result: dict) -> bool:
8282
elif result["type"] == "string":
8383
return isinstance(result["value"], str)
8484
elif result["type"] == "dataframe":
85-
return isinstance(result["value"], (pd.DataFrame, pd.Series))
85+
return isinstance(result["value"], (pd.DataFrame, pd.Series, dict))
8686
elif result["type"] == "plot":
8787
if "plotly" in repr(type(result["value"])):
8888
return True

pandasai/responses/response_parser.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from abc import ABC, abstractmethod
22
from typing import Any
33

4+
import pandas as pd
45
from PIL import Image
56

67
from pandasai.exceptions import MethodNotImplementedError
@@ -51,9 +52,20 @@ def parse(self, result: dict) -> Any:
5152

5253
if result["type"] == "plot":
5354
return self.format_plot(result)
55+
elif result["type"] == "dataframe":
56+
return self.format_dataframe(result)
5457
else:
5558
return result["value"]
5659

60+
def format_dataframe(self, result: dict) -> Any:
61+
if isinstance(result["value"], dict):
62+
print("Df conversiont")
63+
df = pd.Dataframe(result["value"])
64+
print("Df conversiont Done")
65+
result["value"] = df
66+
67+
return result["value"]
68+
5769
def format_plot(self, result: dict) -> Any:
5870
"""
5971
Display matplotlib plot against a user query.

0 commit comments

Comments
 (0)