Я создаю функцию, позволяющую пользователям легко вводить 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, когда нет строго необходимо.