Выполните несколько сценариев на Python, передав имена сценариев

#python #sql #automation

Вопрос:

У меня есть в общей сложности 25-30 сценариев, которые обновляют данные на сервере. Поскольку каждый день генерируются новые данные, поэтому каждый день мне приходится запускать эти сценарии вручную в определенной последовательности и обновлять базу данных новыми данными. Все эти сценарии содержат более 300 строк SQL-запросов.

Теперь я хочу автоматизировать эту задачу с помощью Python, но не совсем уверен, как это сделать. В прошлом я использовал некоторые библиотеки для подключения к SQL server, а затем определял курсор для выполнения определенных запросов — cur.execute(выберите * из abc)

Но теперь я хочу автоматизировать эту задачу и запустить все сценарии, передав только имена сценариев. Нравится

 cur.execute(sql_script_1) cur.execute(sql_script_2) cur.execute(sql_script_3) . . . cur.execute(sql_script_25)  

Таким образом, в конце концов, мне просто нужно будет запустить этот файл .py, и он автоматически запустит все сценарии в заданном порядке. Можно ли это как-то сделать? Либо так, либо каким-то другим способом.

Основной мотив-автоматизировать задачу запуска всех сценариев, просто передавая имена.

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

1. Сценарий bash может быть более подходящим

Ответ №1:

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

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

В любом случае вот что я сделал:

  1. вы храните каждый из сценариев sql в виде строковой переменной в файле python (или файлах) где-то в каталоге вашего проекта.
  2. вы определяете функцию, которая управляет подключением и передает сценарий sql в качестве аргумента.
  3. вы вызываете эту функцию по мере необходимости для каждого сценария.

Таким образом, ваш файл python в одном из них выглядит примерно так:

 sql_script_1 = 'select....from...where...' sql_script_2 = 'select....from...where...' sql_script_3 = 'select....from...where...'  

Затем вы определяете функцию в двух для управления подключением.

Что-то вроде

 import pandas as pd import pyodbc  def query_passer(query:str, conn_db):  conn = pyodbc.connect(conn_db)  df = pd.read_sql(query, conn)  conn.close()  return df  

Затем через три вы вызываете функцию, делаете то, что собирались сделать с данными, а затем повторяете для каждого запроса.

Приведенный ниже код предполагает, что функция query_passer была сохранена в файле python с именем «functions.py» во вложенной папке «ресурсы» и что запросы хранятся в файле с именем «query1.py» в подпапке «ресурсы.запросы». Организуйте свои собственные файлы по своему усмотрению или просто сохраните их все в одном большом файле.

 from resources.functions import query_passer from resources.queries.query1 import sql_script_1, sql_script_2, sql_script_3 import pandas as pd  # define the connection  conn_db = (  "Driver={stuff};"  "Server=stuff;"  "Database=stuff;"  ".....;" ) # run queries df = query_passer(sql_script_1, conn_db) df.to_csv('sql_script_1.csv')  df = query_passer(sql_script_2, conn_db) df.to_csv('sql_script_2.csv')  df = query_passer(sql_script_3, conn_db) df.to_csv('sql_script_3.csv')