python3学习笔记之六——从excel表读取数据,利用字符串格式化方式,将数据写入mysql数据库

预备知识1:从excel表中读取数据,通过xlrd实现。

#打开工作表

ex = xlrd.open_workbook('d:\student.xlsx')

#操作工作表的sheet页,第一页

sheet = ex.sheet_by_index(0)

#获取行数和列数

rows = sheet.nrows

cols = sheet.ncols

#获取一行的数据

data = sheet.row_values('行号')

#获取单元格的数据

data = sheet.cell('行号','列号').value

预备知识2:mysql数据库操作

#数据库连接 ,通过pymysql模块

db = pymysql.connect(host='localhost',user='',password='',db='',port='')

#设置游标,靠它进行数据库操作

cursor = db.cursor()

#创建数据库表格

create table  表名(字段,类型);

#向数据表中插入列

alter table 表名 add column 字段 类型;

#向表格中插入数据

insert into 表名(字段) values(数据)

准备工作完成后,就可以进行读取数据,插入数据库表格了。完整代码如下:

import pymysql
import xlrd

def excel_to_sql():
    excelf = xlrd.open_workbook(r'd:\student.xlsx')
    sheet1 =excelf.sheet_by_index(0)
    #取第一行表头数据作为插入创建表的字段
    firstrow = sheet1.row_values(0)
    sqlcol=','.join(firstrow)  #用于后面插入数据
    #取第二行的数据,为插入字段的数据类型
    secondrow = sheet1.row_values(1)
    #取第第一列的第一行,第二行数据作为创建表的初始值
    firstdata = sheet1.cell(0,0).value  #字段
    firsttype = sheet1.cell(1,0).value  #类型
    #将excel表中存储的类型对应到数据之中,string对应字符型 
    if firsttype == 'string':
        firsttype = 'char(10)'
    else:
        firsttype = firsttype  #int类型
    cols = sheet1.ncols  #总列数
    rows = sheet1.nrows  #总行数

    #连接数据库
    db = pymysql.connect(host='localhost',user='test01',password='123456',db='testdb',port=3306)
    #设置游标,数据的操作就靠它了
    cursor = db.cursor() 

    #创建STUDENT表,其中数据的字段和类型通过字符串格式化插入
    sql = 'DROP TABLE IF EXISTS STUDENT;'
    cursor.execute(sql)
    sql = "CREATE TABLE STUDENT(%s %s);" % (firstdata,firsttype)
    cursor.execute(sql)
    
    #向STUDENT表中插入列,通过for循环从excel表中取出列的字段和类型
    for i in range(1,cols):
        colname = firstrow[i] #剩余的字段
        coltype = secondrow[i] #剩余的字段类型
        if coltype == 'string':
            coltype = 'char(10)'
        else:
            coltype = coltype
        sql = "ALTER TABLE STUDENT\
                ADD COLUMN %s %s;" % \
                (colname,coltype)
        try:
            cursor.execute(sql)
            db.commit()
        except:
            db.rollback()

    #将数据插入已经创建好的表格中
    for i in range(2,rows): #数据是从第三行开始的
        student = sheet1.row_values(i)
        for j in range(0,len(student)):
            if isinstance(student[j],float):
                student[j] = '%d' % student[j] #这里携程”‘%d’“这样也可以,mysql里面‘121’也能插入整型字段中
            else:
                student[j] = "'%s'" % student[j]  #这里一定要加一个引号,不然字符型不带引号就不能插入数据库             
        student1 = ','.join(student)#一次性取一行数据                     
        sql = "INSERT INTO STUDENT(%s)\
                values(%s);" %\
                (sqlcol,student1)    #这里有一点值得注意的是mysql中int型的字段中,既可以插入12,也可以插入‘12’
        try:
            cursor.execute(sql)
            db.commit()
        except:
            db.rollback()

    db.close()
                

excel_to_sql()

执行结果:

#student.xlsx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值