[Python] 将excle表中数据 转为sql语句创建表

本文介绍了一种将Excel文件转换为SQL语句文件的方法,实现了数据导入到SQL数据库的功能。利用Python的xlrd库读取Excel数据,并生成创建表及插入数据所需的SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发插件需要实现功能:用户选择一个excel文件,后台将该excle文件转换为sql语句(.sql)文件,执行该文件进而在sql数据库中创建该excle表中的数据。

本文实现部分:将该excle文件转换为sql语句(.sql)文件

python和sql都为初学,以下代码琢磨了一个晚上,可能仍有语句繁琐,或者用其他简单方法可替代的地方

import xlrd       # 这两个库没有的可以 pip install 安装一下
import xlwt

【补充】
如果直接pip install xlrd,在后续使用该函数时可能会报错:

xlrd.biffh.XLRDError: Excel xlsx file; not supported

解决办法参考博客:https://blog.youkuaiyun.com/weixin_44073728/article/details/111054157

# 创建转换函数,输入参数:excle文件名,sql文件名,创建的sql表名
def excel_to_sql(excelfilename,sqlfilename,table_name):
	excelfilename = excelfilename
	sqlfilename = sqlfilename
	table_name = table_name
	data = xlrd.open_workbook(excelfilename)
	sheet_data = data.sheet_by_name('Sheet1')
	file = open(sqlfilename,mode = 'w+')   # 创建sql文件
	colNum = sheet_data.ncols        # 列数
	num = sheet_data.nrows        # 行数
	d_type = ['VARCHAR(20)', 'VARCHAR(20)', 'VARCHAR(20)','VARCHAR(20)']  # 后期开发拟通过用户输入获取

(1)创建sql中创建表(CREATE TABLE)部分

	# ------- 创建表 ----------
	sql_c = '''create table {} (\n'''.format(table_name)  
	header = sheet_data.row_values(0)
	for i in range(colNum):
		if i< colNum-1:        # 为了实现最后一行不加逗号的效果
			sql_c = sql_c + header[i] + ' ' + d_type[i] +',\n'
		else:
			sql_c = sql_c + header[i] + ' ' + d_type[i] + '\n);'
print('sql_c = ', sql_c)

以上运行结果符合sql语句要求
在这里插入图片描述
(2)创建sql中插入表数据(INSERT INTO)部分

	# ------- 插入数据 ---------
	row_data =''
	for j in range(1,num):
		row_list = sheet_data.row_values(j)   # 表中每一行的数据
		row_v = str(row_list)
		# print('row_v= ', row_v,type(row_v))
		row_v = row_v[1:-1]
		# row_v[-1] = ')'
		# print('row_v= ', row_v)
		row_da = '(' + row_v + ')'
		if j < num-1:
			row_data = row_data + row_da + ','
		else:
			row_data = row_data + row_da + ';'
	# print('row_data = ', row_data)
	sql_insert = '''insert into {} \n Values {}'''.format(table_name,row_data)   #插入命令	
print('sql_insert = ', sql_insert) 

结果符合sql语句要求
在这里插入图片描述
最后把两部分连接起来,并写入.sql文件即完成

	sql_all = sql_c + '\n' +sql_insert
	print(sql_all)

	file.write(sql_all)
	file.close()
	print("sucess !")

if __name__ == '__main__':
	excel_to_sql('a.xlsx','a.sql','test_data')

print结果:
在这里插入图片描述
最后在SQLyog中可以成功运行,但数据类型的显示仍有有待进一步修改,总体算实现了所需要的效果
在这里插入图片描述

参考了以下博客中的部分内容:https://blog.youkuaiyun.com/jeanette_zlj/article/details/106079344

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值