朝陽專業(yè)網(wǎng)站建設靜態(tài)網(wǎng)頁設計與制作
目錄
- excel轉(zhuǎn)sql的insert語句
- 一、背景
- 二、直接上代碼
excel轉(zhuǎn)sql的insert語句
一、背景
在實際測試工作中,需要頻繁地進行測試造數(shù)并插入數(shù)據(jù)庫驗證,常規(guī)的手寫sql語句過于浪費時間,為此簡單寫個腳本,通過excel來造數(shù),快速生成insert語句,以此提高測試效率。
二、直接上代碼
- 代碼如下:
import pandas as pd
import pyperclip
import traceback
import osclass SourceData:def __init__(self, path, sheet_name, engine=None):# 通過pandas讀取excel文件的指定sheet頁,過濾掉為空的表頭self.df = pd.DataFrame(pd.read_excel(path, sheet_name=sheet_name, dtype='string', na_filter=False,usecols=lambda x: not x.startswith('Unnamed'), engine=engine))self.data = self.df.iloc[:, 1:] # 讀取數(shù)據(jù)主體self.table_name = self.df['table_name'][0] # 讀取要造數(shù)的表名def to_sql(self):keys = '("' + '","'.join(list(map(lambda x: x.strip(), self.data.columns.to_list()))) + '")' # 拼接sql語句的keys部分table_name = self.table_namevalues = ','.join(map(lambda x: "('" + "','".join(x) + "')", self.data.to_records(index=False).tolist())) # 拼接sql語句的values部分sql = ' '.join(['INSERT INTO', table_name, keys, 'VALUES', values]) + ';' # 構(gòu)造insert語句print(sql) # 打印到交互窗口pyperclip.copy(sql) # 復制到剪貼板,以便直接進行粘貼if __name__ == '__main__':while True:path = input('請輸入源數(shù)據(jù)文件路徑:')if not os.path.exists(path): # 文件錯誤時不退出,而是重新輸入print('文件不存在,請檢查路徑后重新輸入!')continueelse:while True:sheet_name = input('請輸入sheet_name:')try:obj = SourceData(path, sheet_name)obj.to_sql()except Exception as msg:print(traceback.format_exc())continue
-
excel造數(shù)模板如下
由于sheet頁名稱有長度限制,所以只有將表名放于主體區(qū)域::
-
執(zhí)行結(jié)果如下:
先指定excel路徑,后面會進入到sheet名稱讀取的循環(huán)中,可以在一個excel文件里面建多個表的造數(shù)sheet。
轉(zhuǎn)換結(jié)果會打印出來,但用戶不需要再去選中復制,因為這里用了pyperclip模塊,在代碼中已經(jīng)復制到剪貼板了,可以直接粘貼使用
由于功能簡單,所以就不做界面了