Как запросить несколько имен таблиц в sqlalchemy одновременно? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть список таблиц в столбце CSV, который я прочитал в виде кадра данных в панд, например:

df = pd.read_csv('~/tablenames')

таблица имен csv выглядит так:

tablenames
 table1
 table2

Соединение с БД и итерация по фрейму данных создается следующим образом:

import pandas as pd
from sqlalchemy import create_engine

df = pd.read_csv('~/tablenames')

engine = create_engine('connection_string')


 for index,row in df.iterrows():
        df['column_count'] = pd.read_sql_query("select count(column_name) from information_schema.columns where table_name = '%s'"%row['table_name'],con=engine)
        df['row_count'] = pd.read_sql_query("select count(*) from %s"%row['table_name'],con=engine)

Вышеприведенный цикл получает только данные первых таблиц и выполняет запрос только для этой первой таблицы в кадре данных. Что я делаю не так, когда запрос не выполняется для остальных имен таблиц в кадре данных?

Я не получаю никаких сообщений об ошибках. Если это помогает, я подключаюсь к postgres db.

редактирование:

 count
0     45
   count
0     89
   count
0     36
   count
0     17
   count
0     12

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Измените цикл for на

 #also here add .iloc[0]
 for index,row in df.iterrows():
        df.loc[index,'column_count'] = pd.read_sql_query("select count(column_name) from information_schema.columns where table_name = '%s'"%row['table_name'],con=engine).iloc[0]
        df.loc[index,'row_count'] = pd.read_sql_query("select count(*) from %s"%row['table_name'],con=engine).iloc[0]

Обновление

for index,row in df.iterrows():
     updatedf=pd.read_sql_query("select * from information_schema.columns where table_name = '%s'"%row['table_name'],con=engine)   
     df.loc[index,'column_count'] = updatedf.shape[1]
     df.loc[index,'row_count'] = updatedf.shape[0]
0 голосов
/ 13 мая 2019

Попробуйте панды конкат

import glob
import pandas as pd

# glob.glob('table*.csv') - returns List[str]
# for f in glob.glob() - returns a List[DataFrames]

df = pd.concat([pd.read_csv(f) for f in glob.glob('table*.csv')], ignore_index = True)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...