Python實現SQL指令碼內容的讀取

2021-09-11 21:17:48 字數 2050 閱讀 8758

為實現python對sql指令碼的自動化呼叫或批量執行,讀取指令碼內容自然是第一步,也是關鍵所在

規範化的sql指令碼是我們的最愛,**處理也最為簡單,如網文《20行python**執行sql檔案》、《python執行sql指令碼》

等但是!

sql指令碼檔案內容如果包含人為的手寫

不規範的多種備註方式的情況,該怎麼處理呢?

以mysql為例,備註內容的書寫方式就有好幾種,如下:

# 備註方式1

-- 備註方式2

/*備註方式3

*/select * from dual; # 備註方式4

select * from dual; -- 備註方式5

參考資料

《mysql指令碼注釋使用》

《python逐行讀檔案的三種方法》

如下方法實現mysql指令碼檔案的讀取,包含了對備註內容的處理,入參path 是指令碼檔案的絕對路徑,出參為 sql語句的字串列表

def readsqlfile(path):

f = open(path, "r", encoding="utf-8")

lines = f.readlines()

sqllist =

thissql = ""

mulnote = false

for line in lines:

string = str(line).strip()

if string == "":

continue

# part1 multi-line comment

if mulnote:

if string.startswith("*/"):

mulnote = false

continue

if string.startswith("/*"):

mulnote = true

continue

if string.startswith("#") or string.startswith("--"):

continue

strin1 = false

strin2 = false

for i in range(len(string)):

c = string[i]

# part2 string in sql

if "'" == c:

if not strin1:

strin1 = true

else:

strin1 = false

continue

if '"' == c:

if not strin2:

strin2 = true

else:

strin2 = false

continue

if strin1 is true and strin2:

continue

# part3 end of sql

if ";" == c:

string = string[0:(i + 1)]

break

# part4 comment behind of the sql

if "#" == c:

string = string[0:i]

break

if "-" == c and i <= len(string) - 2 \

and "-" == string[i + 1]:

string = string[0:i]

break

# part5 join multi-line for one sql

thissql += " " + string

# part6 end of sql

if string.endswith(";"):

thissql = ""

return sqllist

linux指令碼實現excel檔案內容讀取到資料庫

假設我現在有乙個表,需要插入excel的資料 建立表的 如下 create table student sid varchar 10 sname varchar 20 sgender char 1 sage int 現在要從excel匯入資料 首先我們可以把資料轉化成csv或者txt,這裡我用csv...

Python指令碼批量生成SQL語句

通過python指令碼批量生成插入資料的sql語句 原始sql語句 insert into system user id,login name,name,password,salt,code,createtime,email,main org,positions,status,used,url,in...

python指令碼實現檔案備份

本指令碼通過判斷是否為周一來執行完全備份或增量備份,需提前放到計畫任務中每天執行,實現周一完全備份,之後每天增量備份的功能.具體 實現如下 root bin python from time import strftime import os import tarfile import hashli...