#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. Ваш случай может отличаться, но я полагаю, что базовая структура останется прежней.
В любом случае вот что я сделал:
- вы храните каждый из сценариев sql в виде строковой переменной в файле python (или файлах) где-то в каталоге вашего проекта.
- вы определяете функцию, которая управляет подключением и передает сценарий sql в качестве аргумента.
- вы вызываете эту функцию по мере необходимости для каждого сценария.
Таким образом, ваш файл 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')