我使用的是第三方包openpyxl进行数据的读取,读取的文件是xlsx格式的,如下:
from openpyxl import workbook main_book = openpyxl.load_workbook(r'D:\final.xlsx') main_sheet = main_book.active row = main_sheet.max_row # 查询文件有多少行 row # 我的文件的行数为 480908
我的文件的结构如下所示:
文件有4列,一共是480908行
one = [] three =[] caseid = [] content = [] # 将四列数据分别存入四个list中 for i in range(1, row + 1): # 从第1行开始的 one.append(main_sheet.cell(i, 1).value) three.append(main_sheet.cell(i, 2).value) caseid.append(main_sheet.cell(i, 3).value) content.append(main_sheet.cell(i, 4).value)
接下来是最关键的一步
# 最关键的一步,需要将要导入数据库的list组成一个元组,这样才能使用pymysql中的executemany快速导入数据库中 tuple_total = list(zip(one, three, caseid, content))
db = pymysql.connect( host='localhost', #要连接的主机地址,本人连接自己本地的数据库 port=3306, # 端口号,一般为3306 user='账户', passwd='密码', db ='kg', # 所使用的数据库名 charset='utf8' ) cursor = db.cursor() # 创建游标
代码如下(示例):
# 创建一个表 # 本人的表格是四列的,所以在数据库中建立四个表名 sql_create = "CREATE TABLE test(one VARCHAR(200),three VARCHAR(255),caseid VARCHAR(1000), content VARCHAR(3000))" try: cursor.execute(sql_create) db.commit() except: # 对异常进行处理 db.rollback()
你在自己的数据库中会发现有个test表的存在。
此时,要用到上面所说的tuple_total数据了,其中代码如下:
# 注意,%s是没有任何''这个符号的 sql_insert = "insert into test(one,three,caseid,content) VALUES (%s,%s,%s,%s)" try: cursor.executemany(sql_insert, tuple_total) db.commit() except Exception as e: print('出错的原因为: %s出错:%s' % (sql_insert, e))
若是没有出错,就可以在数据库的test表去查看数据了
可以使用sql语句在数据库中执行,看总的行数是否与在处理数据时的行数相同。
我自己去检查我的数据是否正确,在数据库中用了一下的语句:
可以看到其中caseid列的数据的行数为:480908,与前面进行处理完毕的数据的行数相同,至此,已经将数据全部写入数据库中。