Untitled

 avatar
unknown
plain_text
a month ago
1.7 kB
2
Indexable
import os

import sqlite3

import pandas as pd



os.environ['SQLITE_DB_PATH'] = r'/c01/home/lidtd3o/APP_K/app_db_new.db'



def get_parent_child(program_id, var_name):

    """

    Optimized function to get children and parents of the target variable.

    Returns two lists: one for children and one for parents.

    """
    values = re.split(r' OF ', var_name) if ' OF ' in var_name else [var_name]
    values = [value.strip() for value in values]
    if len(values)>1:
        parent = values[1]
        child = None
    elif len(values)==1:
        # Connect to the database

        conn = sqlite3.connect(os.getenv('SQLITE_DB_PATH'))



        # Fetch all relevant records in a single query

        query = f"""

            SELECT VARIABLE_NAME, VARIABLE_PARENT, PROGRAM_NAME 

            FROM BRE_ATTRIBUTE_TBL

            WHERE PROGRAM_NAME = '{program_id}' 

              AND (VARIABLE_NAME = '{var_name}' OR VARIABLE_PARENT = '{var_name}')

        """

        df = pd.read_sql_query(query, conn)

        conn.close()



        # Separate parents and children

        children = df[df['VARIABLE_PARENT'] == var_name][['VARIABLE_PARENT', 'VARIABLE_NAME', 'PROGRAM_NAME']].values.tolist()

        parents = df[df['VARIABLE_NAME'] == var_name][['VARIABLE_PARENT', 'VARIABLE_NAME', 'PROGRAM_NAME']].values.tolist()
        children = [child for parent, child, program in children if parent == var_name]
        # print(children)
        parents = [parent for parent, child, program in parents if child == var_name]
        # print(parents)
        child = None
        parent = None
        if children!=[]:
            child = children[-1]
        if parents!=[]:
            parent = parents[-1]

    return child, parent
Editor is loading...
Leave a Comment