Многопроцессорная обработка SQL-запросов к фрейму данных с помощью Python

#python #sql #postgresql #multiprocessing

#python #sql #postgresql #многопроцессорная обработка

Вопрос:

Я адаптирую скрипт на Python, который я нашел в качестве ответа на аналогичный вопрос (56400556). Скрипт работает, но в настоящее время результаты SQL сохраняются в списке, в то время как я ищу возможность экспортировать это в фрейм данных (или второй вариант в csvs).

Есть ли способ запускать SQL-запросы параллельно (поскольку каждый запрос занимает около 10 минут) и сохранять эти данные в dataframe. Это может быть либо один фрейм данных с результатом всех запросов, либо один фрейм данных на запрос, это не имеет значения

Вторичной проблемой было бы избежать перечисления всех SQL-запросов как только одного изменения параметра, но иметь один SQL-запрос и список параметров для ввода (например: ‘UK’, ‘IT’, ‘US’ и т.д.)

 from multiprocessing import Pool
import pandas as pd
import psycopg2
import os

query_load = [("SELECT * FROM customer_table WHERE country ='UK' "),
             ("SELECT * FROM customer_table  WHERE country ='IT' ")]

db_conn = psycopg2.connect(
    host="hostname",
    database="databasename",
    user="username",
    password="password")

def read_sql(query):
    return pd.read_sql(query, db_conn)

if __name__ == '__main__':
    with Pool() as p:
        data_load =  p.map(read_sql, query_load)
    print(data_load)
  

Спасибо

Комментарии:

1. Вы добавили индекс на country ?

2. Да, я добавил индексы в таблицу SQL, но это не ускоряет выполнение запроса

3. Сколько строк в базе данных? Миллионы?