【如何用Python3写一段将Excel数据导入SQL数据库?】
提主没有说导入到哪个sql数据库,我这里就以导入sqlite3为例。
主要分为2步:1,读取xls文件的数据 ; 2,写入sql数据库
以下excel源文件截图
import xlrd
import sqlite3
file = “H:\\xls\\全国省市县列表.xls”
data = xlrd.open_workbook(file)
table = data.sheets()[0] #第一个sheets
datalist=[]
for i in range(1,table.nrows): #总行数
datalist.append(tuple(table.row_values(i)))
conn = sqlite3.connect(‘d:\\database\\country.db’) #数据库文件的路径
cursor = conn.cursor()
cursor.execute(“create table country(province varchar(20),num int,town varchar(30),town varchar(30))”) ##创建表
sql = ‘insert into country(province,num,city,town) values(?,?,?,?)’
cursor.executemany(sql,datalist) #插入数据
conn.commit() #提交数据到数据库
conn.close() #关闭连接
print(“导入完成”)
导入不同的数据库有不同的模块,比如mysql使用pymysql模块,具体根据你的需求来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
向来主张拿来主义,下面只是mysql的一个实现,自动由excel的表头构建表,能看懂的,自己拿去。 ####################################### #/usr/bin/env python3 # -*- coding:utf-8 -*- import os import sys import getopt import openpyxl import pymysql import datetime import re import itertools #数据库连接配置文件 __db_config = { 'host':'127.0.0.1', 'port':3306, 'user':'your.db.username', 'password':'your.db.password', 'db':'xls', 'charset':'utf8' } #################### def usage(): print( 'xls2db.py usage:' ) print( ' xls2db filename(xlsx)' ) print( ' version: 1.0.1' ) print( ' by sun' ) exit(1) #主函数执行 if __name__ == '__main__': if len(sys.argv) != 2: usage() fname = sys.argv[1] if not os.path.exists(fname): print("file not exist:", fname) exit(2) #创建链接 connection = pymysql.connect(**__db_config) print("loadfile:", fname) wb = openpyxl.load_workbook(fname) for shname in wb.get_sheet_names(): ws = wb.get_sheet_by_name(shname) #过滤空表 if ws.max_row <= 1: break #构建建表SQL sql = 'DROP TABLE IF EXISTS `xls`.`%s`;\n' % (shname) sql += 'CREATE TABLE `xls`.`%s` (\n `indx` INT NOT NULL AUTO_INCREMENT,\n' % (shname) #构建表的结构 for col in ws.iter_cols(max_row=2): if not isinstance(col[0].value, str): break; if col[1].is_date: sql += ' `%s` DATETIME NULL DEFAULT NULL, \n' % (col[0].value) else: sql += ' `%s` VARCHAR(64) NULL DEFAULT NULL,\n' % (col[0].value) sql += ' PRIMARY KEY (`indx`) \n) DEFAULT CHARACTER SET = utf8;\n' with connection.cursor() as cursor: row_count = cursor.execute( sql ); print('create table:', shname) #构建自增主键 indx = itertools.count(1,1) #构建插入语句 sql = 'INSERT IGNORE INTO `xls`.`%s` ' % (shname) for row in ws.iter_rows(min_row=2): insql = sql \ + 'VALUES (%s, ' % next(indx) \ + ', '.join(["'%s'" % ''.join(filter(lambda x: x not in('"\''), str(var.value))) for var in row]) \ + ')\n' with connection.cursor() as cursor: row_count = cursor.execute( insql ); connection.commit() print('insert table(%s), items(%s)' % (shname, next(indx))) #关闭数据链接 connection.close() |