Динамически выводить файлы CSV - PullRequest
0 голосов
/ 14 декабря 2018

Я создал базу данных SQLite с использованием Python IDE «Spyder».База данных содержит таблицу с именем «Engine_Data».

Каждую неделю мне приходится анализировать данные в «Engine_Data» по переменной «Engine Code» и выводить результаты в CSV.К сожалению, это привело меня к тому, что я вручную написал пятнадцать отдельных запросов SQL, чтобы сгенерировать пятнадцать отдельных файлов CSV, поскольку существует 15 различных типов кода механизма:

Вот мои запросы:

q1 = pd.read_sql_query("Select * from Engine_Data WHERE Engine_Data.[Engine Code] = 'A';", conn)

q1.to_csv(Engine_Code_A_Path, index=False)

Второй запрос:

q2 = pd.read_sql_query("Select * from Engine_Data WHERE Engine_Data.[Engine Code] = 'B';", conn)

q2.to_csv(Engine_Code_B_Path, index=False)

И так далее до кода двигателя O!

Конечно, этот метод слишком утомителен, поэтому я пыталсядинамически генерировать пятнадцать CSV-файлов, используя массив всех кодов двигателя и цикл for:

Engine_Code_Array = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O']

for i in Engine_Code_Array:
    q = pd.read_sql_query("Select * from Engine_Data WHERE Engine_Data.[Engine Code] = array[i];", conn)
    q.to_csv(Path, index = True)

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

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Я думаю, что @mad_ имеет в основном правильную идею, но предложил бы реализовать ее следующим образом:

import os

def generate_engine_code_CSV_files(dest_path, engine_codes):
    """ Generate separate CSV file for each engine code.
    """
    for engine_code in engine_codes:
        query = (
            "Select * from Engine_Data "
                "WHERE Engine_Data.[Engine Code] = '{}';".format(engine_code))

        query = pd.read_sql_query(query)
        report_path = os.path.join(
            dest_path, 'Engine Code {} Report.csv'.format(engine_code))
        query.to_csv(report_path, index=True)

report_folder_path = "path/to/reports/folder"
generate_engine_code_CSV_files(report_folder_path, 'ABCDEFGHIJKLMNO')
0 голосов
/ 14 декабря 2018

Параметр должен быть вне квот

"Select * from Engine_Data WHERE Engine_Data.[Engine Code] = %s",(Engine_Code_Array[i])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...