python实现excel数据半自动导入sql数据库表格

这篇博客介绍了如何使用Python实现Excel数据的半自动导入到SQL数据库中,包括识别Excel第一行作为属性,创建SQL表格,插入数据及删除表格的步骤。作者提到在创建SQL表格时可能存在细节问题,欢迎有经验的大佬提供改进建议。

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表格的自动创建中存在一些细节上的疏漏,由于我是想设计一个自己方便使用的库,所以函数的参数入口设计尽量简单,导致部分复杂功能又得设计不同函数的输入口,而且本人水平有限,也就设计简单功能,抱着能用就行的态度。
如果有大佬看到这篇博客,有想法的希望能给我一些建议,十分感谢。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值