簡體   English   中英

通過傳遞腳本名稱在 Python 中執行多個腳本

[英]Execute multiple scripts in Python by passing the scripts names

我總共有 25-30 個腳本來更新服務器上的數據。 由於每天都會生成新數據,因此每天我都必須按順序手動運行這些腳本並使用新數據更新數據庫。 所有這些腳本都包含 300 多行 SQL 查詢。

現在我想用 Python 自動化這個任務,但不確定如何做到這一點。 我過去使用過一些庫連接到 SQL 服務器,然后定義一個游標來執行某些查詢 - cur.execute(select * from abc)

但現在我想自動化這個任務並通過只傳遞腳本名稱來運行所有腳本。 喜歡

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

這樣,最后,我只需要運行這個 .py 文件,它就會按照給定的順序自動運行所有腳本。 這可以以某種方式完成嗎? 以這種方式或其他方式。

主要動機是通過傳遞名稱來自動化運行所有腳本的任務。

您的問題可能是一個糟糕的問題,有點模糊,並且在研究或自己實施方面沒有表現出任何努力。 但我可能有類似的用例,所以我會分享。

在我的情況下,我需要將數據作為熊貓 df 提取。 您的情況可能會有所不同,但我想基本結構將保持不變。

無論如何,這就是我所做的:

  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 函數保存在子文件夾“resources”中名為“functions.py”的 python 文件中,並且查詢存儲在子文件夾“resources.queries”中名為“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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM