I need to convert my python dictionary to sql query. Below is how my dictionary looks like
dict_info = {
"Tables": [
"product",
"sales"
],
"Columns": {
"product": [
"prod_id",
"prod_desc",
],
"sales": [
"prod_id",
"prod_sales",
"prod_qty"
]
},
"Filter": {
"region_id": "1,2",
"state_id": "4,7,9",
"store_id": "14",
}
}
I am trying to make two different queries since there are two tables information.(if it is 3 tables, then I have to make 3 different queries.
What I need.
Query1= " SELECT product.prod_id, product.prod_desc FROM product WHERE product.region_id in
(1,2) AND product.state_id in (4,7,9) AND product.store_id in (14);
Query2= " SELECT product.prod_id, product.prod_sales, product.prod_qty FROM product WHERE
sales.region_id in (1,2) AND sales.state_id in (4,7,9) AND sales.store_id in (14);
What I tried:
import pandas as pd
import numpy as np
get_tables = dict_info.get("Tables", [])
get_columns = dict_info.get("Columns", [])
for i in tables:
query = "SELECT " + ", ".join(columns[i]) + ' FROM ' + i ";"
Need help in how to put filter statements in the same query and creating dynamic queries for each of table selected.
You can achieve this by iterating over the tables and columns in your dictionary and appending the filter conditions on the end of each query:
def generate_sql_queries(dict_info):
queries = []
# Extracting filter conditions + formating them
filters = dict_info.get("Filter", {})
filter_conditions = []
for column, values in filters.items():
values = values.split(',')
condition = f"{column} in ({','.join(values)})"
filter_conditions.append(condition)
filter_str = " AND ".join(filter_conditions)
# Generating queries for tables
tables = dict_info.get("Tables", [])
columns_dict = dict_info.get("Columns", {})
for table in tables:
columns = columns_dict.get(table, [])
columns_str = ', '.join([f"{table}.{col}" for col in columns])
query = f"SELECT {columns_str} FROM {table} WHERE {filter_str};"
queries.append(query)
return queries
# Example use:
dict_info = {
# your dictionary is here
}
queries = generate_sql_queries(dict_info)
for i, query in enumerate(queries, 1):
print(f"Query{i} = \"{query}\"")