pythonsqlpandasdictionary

How to convert dictionary into SQL Query?


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.


Solution

  • 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}\"")