在实际工作中遇到了真实生产数据尚未拿到,需要先造一些假数据完成某些功能的开发,想到了利用python来实现创建临时表数据:
提前造好的数据样式:

| import pandas as pd |
| |
| |
| import pylightxl as xl |
| |
| file_path = '/Users/Desktop/事先造好的接口测试数据.xlsx' |
| |
| xlsx = xl.readxl(fn=file_path) |
| tab = 'rsrc' |
| for sheet_name in xlsx.ws_names: |
| df = pd.read_excel(file_path, sheet_name=sheet_name, index_col=False) |
| sql = [] |
| for i in range(df.shape[0]): |
| for j in range(df.shape[1]): |
| if j == 0: |
| col_1 = df.iloc[i,j] |
| col_name_1 = df.columns[0] |
| else: |
| col_2 = df.iloc[i,j] |
| col_name_2 = df.columns[1] |
| sentence = f"select '{col_1}' as {col_name_1}, {col_2} as {col_name_2}, '{tab}' as tab from dual" |
| sql.append(sentence + '\n' + 'union all' + '\n') |
| |
| sql = ' '.join(sql) |
| sql_copy = sql |
| |
| sql_copy =sql[0:len(sql)-10] |
| |
| with open(r'/Users/Desktop/测试临时表语句.txt','r+') as f: |
| content = f.read() |
| f.seek(0, 0) |
| f.write("【" + sheet_name +"】"+":" +"\n" + sql_copy + "\n" + content) |
最终输出样式:

优化后通用函数
union all 生成临时数据表-oracle
| def create_tmp_sql_fun(df): |
| import pandas as pd |
| import numpy as np |
| |
| sql = [] |
| for i in range(df.shape[0]): |
| |
| sentence = [] |
| for j in range(df.shape[1]): |
| for col_inde, col_name in enumerate(df.columns): |
| if j == col_inde: |
| |
| if isinstance(df.iloc[i,j], str): |
| |
| if type(df.columns) == pd.MultiIndex: |
| con_str = f"'{df.iloc[i,j]}' as {col_name[1]}," |
| else: |
| con_str = f"'{df.iloc[i,j]}' as {col_name}," |
| |
| elif not isinstance(df.iloc[i,j], str): |
| |
| if type(df.columns) == pd.MultiIndex: |
| con_str = f"{df.iloc[i,j]} as {col_name[1]}," |
| else: |
| con_str = f"{df.iloc[i,j]} as {col_name}," |
| sentence.append(con_str) |
| |
| sen = 'select'+ ' ' + ''.join(sentence) + 'from dual' + '\n' + 'union all' +'\n' |
| sql.append(sen.replace(',from', ' from')) |
| |
| |
| fields = [] |
| for field_name in df.columns: |
| if type(df.columns) == pd.MultiIndex: |
| fields.append(field_name[1]) |
| else: |
| fields.append(field_name) |
| |
| |
| sql = ("select {} \nfrom(\n" + ''.join(sql)[0:-10] + ')a').format(','.join(fields)) |
| return sql |
将临时数据表数据插入正式库表-oracle
| |
| def create_insert_db_func(table_name, sql, df): |
| |
| |
| sen_1 = f'create table {table_name} \n(\n' |
| sen_2 = [] |
| for field_name in df.columns: |
| |
| if type(df.columns) == pd.MultiIndex: |
| field_name_1 = field_name[1] |
| else: |
| field_name_1 = field_name |
| |
| if df[field_name].apply(lambda x: isinstance(x, str)).unique()[0]: |
| data_type = 'varchar2(50)' |
| elif df[field_name].apply(lambda x: isinstance(x, int)).unique()[0]: |
| data_type = 'int' |
| else: |
| data_type = 'float' |
| sen_2.append(f"{field_name_1}\t\t{data_type},\n") |
| |
| |
| create_sentence = sen_1 + re.sub(r',([^,]*)$', r'\1', ''.join(sen_2)) + '\n)' |
| |
| insert_sentence = f'insert into {table_name}\n\n{sql}\n;' |
| |
| return create_sentence, insert_sentence |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2022-04-07 python-关联规则