Добавление кортежей, возвращаемых циклом for

Я выполняю несколько 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.

Отвечает ли это на ваш вопрос? Добавление кортежей в DataFrame Pandas

Jan_B 19.03.2024 16:35

создать список перед циклом, а затем добавлять к нему каждую итерацию? В чем именно проблема?

juanpa.arrivillaga 19.03.2024 16:37

Я не знаком со старым cursor.execute(), но он уже возвращает кортеж? Каков результат print(results)?

quamrana 19.03.2024 16:39

@quamrana, да, наверное, просто results = cursor.execute(...), тогда просто data = list(results)

juanpa.arrivillaga 19.03.2024 16:40

@juanpa.arrivillaga Попробовал это сделать, если я заменю print(results) на list.append(result), я просто получу объект «кортеж», не имеющий атрибута «append»

Nairda123 19.03.2024 16:44

Если я сделаю data = list(results), я просто получу: TypeError: объект «список» не может быть вызван.

Nairda123 19.03.2024 16:45

Да, курсор_execute() возвращает кортежи

Nairda123 19.03.2024 16:45

Итак, у вас уже есть кортеж кортежей?

quamrana 19.03.2024 16:57

В каждом цикле возвращается кортеж, мне нужно, чтобы все кортежи были объединены вместе.

Nairda123 19.03.2024 16:58

Так как же results еще не "all the tuples joined together"?

quamrana 19.03.2024 16:58

Я сказал, используйте список, а не кортеж. Объекты-кортежи неизменяемы. Вам не нужен кортеж кортежей, вы можете просто использовать список кортежей, но если вы действительно хотите, вы можете преобразовать свой список в кортеж.

juanpa.arrivillaga 19.03.2024 17:00

Вы получаете сообщение об ошибке, связанное с невозможностью вызова объектов списка, поскольку вы присвоили объект списка переменной list. Не делай этого.

juanpa.arrivillaga 19.03.2024 17:02

@quamrana на каждой итерации возвращается один кортеж, поэтому за один цикл возвращается один кортеж. Мне не удается собрать их вместе, будь то список или кортежи.

Nairda123 19.03.2024 17:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
13
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не понимаю, что такое итерация списка, поскольку вы, похоже, нигде не используете 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"])

Другие вопросы по теме