情境
假設現在我們有一個情境要生成 500 個 SQL
UPDATE `tableA` INNER JOIN `tableB` ON `tableA`.`foreign_id` = `tableB`.`id` SET `setting_value` = "number:111" WHERE `tableB`.`test_name` = "testABC";
其中 裡面的變數 111
和 testABC
然後我們有一個 excel 的 mapping table 長的像這樣 裡面就記載了這 500 句 sql 組成的邏輯 現在是還簡單 基本上是一對一的關係 也就是:
111
會對應到 testABC
222
會對應到 testwjfaw
原則上還是可以用 excel 內建的公式來建
但如果複雜一點 比如說根據條件 A ,來決定 111
要對應到的是 testABC
還是 testwjfaw
這樣就會有點複雜 雖然應該還是可以用 excel 的公司來寫 但就會有點麻煩
以下我們就來看看要怎麼用 python 完成吧!
步驟
[step]1[/step] 首先將 excel 輸出成 csv
檔 當作是 python 要引入的資料源
[step]2[/step] 新增 createSQL.py 檔 並在裡面把我們要批次更新的 sql 寫成類變數的型式
temp_sql = 'UPDATE `tableA` INNER JOIN `tableB` ON `tableA`.`foreign_id` = `tableB`.`id` SET `setting_value` = "{setting_value}" WHERE `tableB`.`test_name` = "{test_name}";'
[step]3[/step] 引入剛剛下載下來的 csv
檔並使用 replace
function 來替換掉要改的變數
with open('/your-path-to-file/testFile.csv') as csvfile: # 打開 csv
rows = csv.reader(csvfile, ) # 將 csv 內容一行一行存到 rows
next(rows);
for row in rows: # 一列一列更新
print (temp_sql.replace('{setting_value}','{number' + row[2] + '}').replace('{prod_level2_oid}',row[3])) # row[2]代表第二欄 、row[3]代表第三欄
[step]4[/step] 執行 python 直接在 command line 裡 python ./createSQL
就可以把 sql 都 print 出來了!
結語
最後附上 github 連結: https://github.com/BenmrChen/createSQL.py/blob/main/createSQL.py 有問題的歡迎大大們留言討論 謝謝!