1.代开excel表格,选择sheet,其函数如下
from openpyxl import load_workbook
#输入excel文件,放回work。
def input_file(file_name="输入文件名"):
work = load_workbook(filename=file_name)
return work
#选择excel文件的页,放回sheet,如果数值不合法,则返回默认第一张表格。
def select_sheet(work,list):
#判定数值是否超过界限
if list < len(work.worksheets) and list>=0:
sheet=work.worksheets[list]
else:
sheet=work.worksheets[0]
return sheet
2.自动识别excel第一行作为SQL表格的属性,并且识别excel表格每列的最大字符串数,并将这些数据用数组存储,用于创建SQL表格的初始化数据,同时可以设立SQL的PRIMARY KEY,代码如下。
def creat_attr(sheet,key):
m = 0 #用于标记
attribute = [] #存储数据
for i in sheet.rows: #按行划分
for j in i:
if m == 0:
attribute.append(j.value) #向数组添加属性名
m=m+1
if m > 0:
break
m=0 #重置数值
for i in sheet.columns: #按列划分
max=0 #用于查找最大字符串长度
k=0
for j in i:
if k!=0: #用于排除属性名的字符长度
if len(str(j.value))>max: #选择最长字符串
max=len(j.value)
else:
k=k+1
attribute[m]=attribute[m]+" varchar("+str(max+int(max*0.4))+")" #将字符长度添加到属性中
m=m+1
if key=="null" or key=="NULL":
return attribute
else:
attribute.append("PRIMARY KEY("+key+")")
return attribute #返回数组
3.创建数据库的表格的SQL代码字符如下
#attribute表示关于属性和数值范围的数组,name代表创建SQL的表格名
def creat_table(name,attribute):
s=""
for i in range(len(attribute)-1): #用于删除逗号
s=s+attribute[i]+","
s=s+attribute[len(attribute)-1]
#print("create table "+name+" ("+s+")")
return "create table "+name+" ("+s+")"
3.将excel表格的每行数据添加到SQL的表格中,本文主要是返回其SQL的代码字符,其代码如下
#sheet代表excel的页码,attribute表示关于属性和数值范围的数组,name代表创建SQL的表格名
def incert_table(name,sheet,attribute):
flag=0 #用于删除第一行的表格属性行
don=[] #储存数据
for i in attribute: #判定是否取消数组的最后一个元素
if "PRIMARY" in i:
mk=2
else:
mk=1
print(mk)
for i in sheet.rows:
m=0 #创建限制,防止元组内元素个数比表格属性多而崩溃
s=[] #例如创建('A', 'E', 'I', 'M', 'B', 'E', 'I', 'N', 'A', 'F', 'J', 'N', 'G')元组
mp="" #例如创建(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
for j in i:
if flag!=0:
if m<len(attribute)-mk: #创建限制,防止元组内元素个数比表格属性多而崩溃
s.append(str(j.value))
mp=mp+"%s ,"
else:
s.append(str(j.value))
mp = mp + "%s" #用于删除最后一个逗号
break
m=m+1
else:
continue
if flag!=0:
don.append("INSERT INTO "+name+" VALUES "+"("+mp+"),"+str(tuple(s))) #用于保存数据
print("INSERT INTO "+name+" VALUES "+"("+mp+"),"+str(tuple(s)))
flag=flag+1
return don
4.删除表格,代码如下
#仅放回删除字符创语句,但不执行语句
def delete_table(tablename):
return "drop table " +tablename
运行结果如下
创建表格以及(attribute数组的输出

向表格插入数据

测试代码如下
work=input_file("XX.xlsx")
#print(select_sheet(work,0))
sheet=select_sheet(work,0)
print(creat_attr(sheet,"XX"))
attribute=creat_attr(sheet,"XX")
print(creat_table("name",attribute))
print(incert_table("name",sheet,attribute))#返回的是数组
print(delete_table("name"))
想法和实现功能:通过excel的导入实现SQL表格的自动创建,同时实现数据向SQL表格的添加。
问题:在SQL表格的自动创建中存在一些细节上的疏漏,由于我是想设计一个自己方便使用的库,所以函数的参数入口设计尽量简单,导致部分复杂功能又得设计不同函数的输入口,而且本人水平有限,也就设计简单功能,抱着能用就行的态度。
如果有大佬看到这篇博客,有想法的希望能给我一些建议,十分感谢。
这篇博客介绍了如何使用Python实现Excel数据的半自动导入到SQL数据库中,包括识别Excel第一行作为属性,创建SQL表格,插入数据及删除表格的步骤。作者提到在创建SQL表格时可能存在细节问题,欢迎有经验的大佬提供改进建议。

2202

被折叠的 条评论
为什么被折叠?



