Я использовал sqlalchemy для чтения таблиц из базы данных PostgreSQL, и они хранятся в словаре (ключи - это имена таблиц, значения - это фреймы данных).Я могу получить к ним доступ по одному, но хотел бы масштабировать решение так, чтобы у меня были все таблицы из данной базы данных / схемы в виде кадров данных pandas.Мой код для импорта следующий:
import os
import pandas as pd
import psycopg2
from sqlalchemy import create_engine
engine = create_engine(os.environ['postgres_credentials'] +'db')
conn = engine.connect()
trans = conn.begin()
#Initialize empty dictionary
frames_dict = {}
#Use loop and pd.read_sql() to read tables from DB
table_names = engine.table_names()
select_template = 'SELECT * FROM {table_name}'
for tname in table_names:
query = select_template.format(table_name = tname)
frames_dict[tname] = pd.read_sql(query, conn)
# Close connection
conn.close()
Это успешно получает ключ: значение table_name: dataframe.Основная цель - иметь возможность ссылаться на кадры данных с теми же именами, которые они хранят в качестве ключей и в базе данных (я могу играть с данными оттуда).
Я пробовал следующее:
- Создание списков с использованием .keys () и .values () и индексация списков для назначения
- Использование setattr для перебора списков ключей и значений для назначения имен df (как строк всписок) к соответствующим фреймам данных.
Также я знаю, что это перефразировка этого вопроса четыре года назад, но не было дано однозначного ответа.
Если ключи в виде списка:
['name1','name2','name3']
и значения соответствуют соответствующим фреймам данных, я хотел бы иметь возможность выполнить:
[In] name1
[Out] Col1 | Col2 | Col3
--------------------
foo | 2 | a
bar | 17 | b
...
Спасибо всемза любую помощь, которую вы можете предложить!