pandas转换数据Excel、DataFrame、MySQL

pandas转换数据Excel、DataFrame、MySQL

网上搜了许久[pandas如何读取Excel为嵌套字典的列表]等等问题,做下笔记

Excel转list[map]

如:存在Excel表student

idnameageaddress
1001zhangsan15Beijing
1002lisi16Shanghai
1003wangwu17Nanjing

需要将其转为python处理格式:

import pandas as pd

def read_excel_as_dict(file_name, sheet_name):
    df = pd.read_excel(io=file_name, sheet_name=sheet_name)
    head_list = list(df.columns)  # 获取数据列名
    list_dic = []  # 列表
    for line in df.values:
        aline = dict(zip(head_list, line))  # 字典
        list_dic.append(aline)
        return list_dic  # list[map]

转换效果如下:

[{"id":1001, "name": "zhangsan", "age": 15, "address": "Beijing"},
{"id":1002, "name": "lisi", "age": 16, "address": "Beijing"},
{"id":1003, "name": "wangwu", "age": 17, "address": "Beijing"}]
list[map]转Excel

如上,需要转成Excel

import pandas as pd

def py_to_excel(py_list, excel_name, sheet_name):
    pd.DataFrame(py_list).to_excel(excel_writer=excel_name, sheet_name=sheet_name, index=False)
MySQL读取数据为list[map]

如上,需要转成list[map]

import pymysql


# 读取db数据为list[map]
class DataBaseMySQL:
    def __init__(self, db_info):
        self.conn = pymysql.connect(host=db_info['host'], port=db_info['port'], user=db_info['user'],
                                    password=db_info['password'], db=db_info['dbname'],
                                    charset='utf8', autocommit=True)
        self.cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)  # 读取为列表+字典格式

    def query(self, query_string):
        self.cursor.execute(query_string)
        return self.cursor.fetchall()

    def __del__(self):
        self.cursor.close()
        self.conn.close()
list[map]存入数据库MySQL
from sqlalchemy import create_engine
import pandas as pd


engine = create_engine('mysql://scott:tiger@localhost/test')

def py_to_sql(py_list, excel_name, sheet_name):
    pd.DataFrame(py_list).to_sql(name=table_name, con=engine, if_exists="append")
Excel导入数据库MySQL
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import pandas as pd
import sqlalchemy


# 将excel数据导入db
class Excel:
    @staticmethod
    def database_engine(db_info):
        """
        database_info = {
            "host": "192.168.109.128",
            "user": "root",
            "password": "123456",
            "port": "3306",
            "dbname": "test",
            "dbtype": "mysql",
            "dbengine": "pymysql"
        }
        """
        try:
            SQLALCHEMY_DATABASE_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(
                db_info["dbtype"], db_info["dbengine"], db_info["user"], db_info["password"],
                db_info["host"], db_info["port"], db_info["dbname"]
            )
            sql_engine = sqlalchemy.create_engine(SQLALCHEMY_DATABASE_URI)
        except Exception as e:
            raise Exception("connect to sql failed:", e)
        return sql_engine

    @staticmethod
    def database_write(sql_engine, excel_path, sheet_name, db_table_name):
        """
        :param sql_engine: 需要导入的数据库连接
        :param excel_path: 需要导入sql的excel全路径
        :param sheet_name: excel的sheet页
        :param db_table_name: 需要导入sql的数据库表名称
        """
        try:
            df = pd.read_excel(io=excel_path, sheet_name=sheet_name)
        except Exception as e:
            raise Exception("read excel failed:", e)

        try:
            df.to_sql(db_table_name, sql_engine, index=False, if_exists="append")
        except Exception as e:
            raise Exception("write sql failed:", e)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值