将DataFrame直接打入到mysql的一个表中

问题描述

在项目实战中,会有将一个excel存入到mysql数据库,或者将redis中的一个key的数据存入mysql数据库的情况

解决方案

方案一

最让人能想到的方案是,读取excel或者key的值,转成DataFrame格式,先建好对应的表结构,循环DataFrame的每一行,执行insert插入语句,即可完成需求,因为必不可免的会涉及到建表,写insert的sql语句,循环还会耗费一定的时间,虽然简单易实现,但是效率可能低下哎,有方法可以改善吗?回答是肯定的,有!

方案二(重要)

python给我们提供了强大的各种库,pd.io.sql.to_sql完美的解决了我们的问题,它可以将DataFrame直接转化成mysql的表,不需要我们建表,不需要我们循环,不需要我们写插入的sql语句,不过我们得首先安装第三方库sqlalchemy,直接上代码!
需要注意的是,数据库密码的末尾不能有@,因为链接键中密码与数据库地址是连接在一起的,是使用@进行识别链接数据库的ip的地址的

import pandas as pd
from sqlalchemy import create_engine

# 创建了一个mysql的工具类,方便使用
# df_write_mysql -> DataFrame write into mysql xx database xx table function
class MySQLUtil:
    # host:ip地址,port:端口号,username:用户名,password:密码,db:数据库名,table:表名
    def __init__(self, host, port, username, password, db, table):
        self.host = host
        self.port = port
        self.username = username
        self.password = password
        self.db = db
        self.table = table
        # write_mode:操作方式   方式有:append,fail,replace
        #append:如果表存在,则将数据添加到表后面
        #fail:如果表存在就不操作
        #replace:如果表存在,删了,覆盖重建
        self.write_mode = 'append'
        # 链接键格式 mysql+pymysql://用户名:密码@数据库地址/数据库名?charset=utf8’
        self.connect_url = 'mysql+pymysql://' + username + ':' + password + '@' + host + ':' + port + '/' + db + '?charset=utf8'
        self.mysql_connect = create_engine(self.connect_url)

    def df_write_mysql(self, data):
        # 参数设置:DataFrame 表名 链接键 数据库名 操作方式 是否录入索引
        pd.io.sql.to_sql(data, self.table, self.mysql_connect, schema=self.db, if_exists=self.write_mode, index=False)
        print("write into mysql finish")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值