导入 :一共用三种思路
第一个是本地文件excel导入
第二种是用pandas读取本地excel然后导入
第三种造数据后导入数据库
import pandas as pd
import pymysql,xlwt
import openpyxl
from sqlalchemy import create_engine
from lesson1.create_data import *
#将本地文件的数据导入到数据库
#思路是先连接数据库--建立游标--通过游标执行增删查改语句--提交--关闭游标--关闭连接
def insert_data():
#打开本地文件
data1 = openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\测试数据.xlsx')
#选择表格
table = data1.get_sheet_by_name('测试数据')
#创建一个新的列表
datalist = []
#通过index排除掉第一行标题,只去标题以下每行的内容,输出列表
for index , i in enumerate(table.rows):
if index ==0:
continue
raw_data = [row.value for row in i]
datalist.append(raw_data)
#连接数据库
db = pymysql.connect(host='127.0.0.1', user='root', password='admin123', db='mysql', port=3306, charset='utf8')
#建立游标
conn =db.cursor()
#传入插入语句和数据
conn.executemany('insert into test_data values (%s,%s,%s,%s)' , datalist)
#提交
db.commit()
#关闭游标
conn.close()
#关闭连接
db.close()
#用pandas方法去读数据再传入数据库(需要导入的表头与数据库表头一致)
def insert_data2():
#读取本地文件
df = pd.read_excel(r'C:\Users\Administrator\Desktop\测试数据.xls',sheet_name='测试数据')
#创建数据库连接
engine = create_engine("mysql://root:admin123@127.0.0.1:3306/mysql?charset=utf8")
con = engine.connect()
## True就是可以换行显示。设置成False的时候不允许换行(这里可以不需要)
# pd.set_option('expand_frame_repr',False)
#传入数据库,name=表明,con是连接地址,index=false就是去掉索引,
# if_exists='append'意思是添加数据但不改变表结构,比如数据库有5个字段而只传入4个字段,则确实的字段就显示null,如果是replase就是改变表结构,如果是5个字段而之传入4个,则数据库只有4个字段展示
df.to_sql(name='new_table',con=con,index=False,if_exists='append')
#关闭连接
con.close()
#创建数据再导入数据库
def insert_data3():
#连接数据库
conn = pymysql.connect(host='127.0.0.1', user='root', password='admin123', db='mysql', port=3306, charset='utf8')
cur = conn.cursor()
#创建数据列表
name_list = []
idnum_list = []
age_list = []
cardid_list =[]
#通过循环造十行数据
for i in range(0,10):
name_list.append(get_name())
idnum = get_idnum()
idnum_list.append(idnum)
age_list.append(get_age(idnum))
cardid_list.append(get_card_id())
#插入数据库
for n in range(len(name_list)):
cur.execute("insert into new_table (name,id_num,card_id,age) values (%s,%s,%s,%s)",(name_list[n],idnum_list[n],cardid_list[n],age_list[n]))
#点击提交后断开连接
conn.commit()
cur.close()
conn.close()
导出:
#导出数据库数据成excel
def export_data():
#连接数据库
conn = pymysql.connect(host='127.0.0.1', user='root', password='admin123', db='mysql', port=3306, charset='utf8')
cur= conn.cursor()
#查询语句
cur.execute('select * from %s' % 'new_table')
#获取表字段
fields = [field[0] for field in cur.description]
#获取所有数据
all_data = cur.fetchall()
#写入excel
book = xlwt.Workbook()
sheet = book.add_sheet('测试数据')
#表字段先写入
for col,field in enumerate(fields):
sheet.write(0,col,field)
#写入数据后保存
row = 1
for data in all_data:
for col,field in enumerate(data):
sheet.write(row,col,field)
row +=1
book.save(r'C:\Users\Administrator\Desktop\测试数据1.xls')