Я выполняю несколько SQL-запросов, используя sqlalchemy. У меня есть цикл for, который выполняет запросы к таблицам Snowflake.
Текущий код:
for x in list:
results = cursor.execute(f"SELECT TABLE_NAME as TABLE_NAME, 'TABLE_SCHEMA as TABLE_SCHEMA, MAX(DATE) as DATE FROM {database}.{schema}.{table}")
for result in results:
print(result)
Этот цикл for возвращает кортеж на каждой итерации, как показано ниже:
('SCHEMA_1','TABLE_1','DATE_1')
('SCHEMA_2','TABLE_2','DATE_2')
('SCHEMA_3','TABLE_3','DATE_3')
и т. д.
Как я могу создать кортеж кортежей из этого цикла from? Так что позже я смогу передать его в DataFrame.
Все, что я хочу сделать, это создать фрейм данных из цикла, который будет каждый раз добавлять результаты, чтобы я мог затем записать полный df обратно в Snowflake.
Я не могу использовать модуль Snowflake-Connector-Python[Pandas], и мне нужно сделать это с помощью sqlalchemy + pandas.
создать список перед циклом, а затем добавлять к нему каждую итерацию? В чем именно проблема?
Я не знаком со старым cursor.execute(), но он уже возвращает кортеж? Каков результат print(results)?
@quamrana, да, наверное, просто results = cursor.execute(...), тогда просто data = list(results)
@juanpa.arrivillaga Попробовал это сделать, если я заменю print(results) на list.append(result), я просто получу объект «кортеж», не имеющий атрибута «append»
Если я сделаю data = list(results), я просто получу: TypeError: объект «список» не может быть вызван.
Да, курсор_execute() возвращает кортежи
Итак, у вас уже есть кортеж кортежей?
В каждом цикле возвращается кортеж, мне нужно, чтобы все кортежи были объединены вместе.
Так как же results еще не "all the tuples joined together"?
Я сказал, используйте список, а не кортеж. Объекты-кортежи неизменяемы. Вам не нужен кортеж кортежей, вы можете просто использовать список кортежей, но если вы действительно хотите, вы можете преобразовать свой список в кортеж.
Вы получаете сообщение об ошибке, связанное с невозможностью вызова объектов списка, поскольку вы присвоили объект списка переменной list. Не делай этого.
@quamrana на каждой итерации возвращается один кортеж, поэтому за один цикл возвращается один кортеж. Мне не удается собрать их вместе, будь то список или кортежи.






Я не понимаю, что такое итерация списка, поскольку вы, похоже, нигде не используете x, поэтому опустили это.
Просто добавьте кортежи в список:
data = []
results = cursor.execute(f"SELECT TABLE_NAME as TABLE_NAME, 'TABLE_SCHEMA as TABLE_SCHEMA, MAX(DATE) as DATE FROM {database}.{schema}.{table}")
for result in results:
data.append(result)
df = pd.DataFrame(data, columns=["schema_name", "table_name", "max_date"])
Отвечает ли это на ваш вопрос? Добавление кортежей в DataFrame Pandas