Функция для обработки необязательного размера фрагмента в pandas read_ sql () - PullRequest
0 голосов
/ 02 апреля 2020

Я создаю функцию, позволяющую пользователям легко вводить SQL запросов / сценарий и получать результаты в pandas фрейме данных, как часть более широкого набора упрощенных инструментов для конечных пользователей на моем рабочем месте.

Проблема, с которой я столкнулся сейчас, заключается в том, что мне нужно реализовать аргумент pd.read_sql() chunksize , который изменяет вывод pd.read_sql() с pd.DataFrame на iterator object.

Таким образом, фрагмент кода до реализации chunksize был:

 outputs = {}  # Dict to store the dataframe outputs
 counter = 0

    for command in tqdm(commands):
        try:
            # If SELECT statement, read into dict of dataframes
            if command.upper().strip()[:3] == "SEL":

                outputs[counter] = pd.read_sql(command, con):
                counter += 1

В то время как для обработки случая, когда аргумент chunksize необязательно выбран, я бы обработал его с помощью:

outputs = {}
counter = 0

    for command in tqdm(commands):
        try:
            if command.upper().strip()[:3] == "SEL":

                for chunk in pd.read_sql(command, con, chunksize=chunksize):
                    outputs[counter] = chunk
                    counter += 1

Я смотрю, есть ли чистый способ динамически обрабатывать пользователя, выбирающего или не выбирающего аргумент chunksize. Конечно, я мог бы использовать оператор if/else, но я очень близко подошел к ошибкам пилинта в too many branches / nests (он же делает код стрелки), и я чувствую, что должен быть способ динамически обработать это. Буду очень признателен за советы по самому чистому / наиболее эффективному подходу.

Одним из решений, о котором я подумал, было установка chunksize = 1 + chunksize_selected_by_user, но я не совсем понимаю, каковы последствия эффективности всегда использования chunksize, когда нет строго необходимо.

...