python插入数据到数据库/导出数据库数据

导入 :一共用三种思路
第一个是本地文件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')
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值