使用Python读取大容量的数据并存入数据库中
一、读数据
我使用的是第三方包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() # 创建游标
1.在数据库中建立一个新的表
代码如下(示例):
# 创建一个表
# 本人的表格是四列的,所以在数据库中建立四个表名
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表的存在。
2.将数据写入到数据库中
此时,要用到上面所说的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表去查看数据了
3.检查数据是否正确
可以使用sql语句在数据库中执行,看总的行数是否与在处理数据时的行数相同。
我自己去检查我的数据是否正确,在数据库中用了一下的语句:
可以看到其中caseid列的数据的行数为:480908,与前面进行处理完毕的数据的行数相同,至此,已经将数据全部写入数据库中。