python应用-excel和数据库的读取及写入操作

近日完成一个交办任务,从excel表读取数据,根据ID在数据库表匹配相应的记录,并回填至excel表里。我使用的工具是python。下面记录下相应的模块。

一、从excel表读取数据

import pandas as pd
import numpy as np

def read_excel():
    path = "导出模板.xlsx"
    sheetname = "Sheet1"
    df = pd.read_excel(path, sheet_name=sheetname,index_col=None, na_values=['NA']))
    columns = df.columns    #读取标题
    rows = df.values        #读取数据集 列表list
    rows = np.array(rows)   #需要切片,转换np.array
    # print(rows[:, 0])     #切片列
    return rows

二、据ID在数据库表匹配相应的记录

# coding:utf-8
import pandas as pd
import pymysql

class order:
    def __init__(self):
        self.cn = pymysql.connect(host='XX.XX.XX.XX',
                                  user='root',
                                  password='123456',
                                  database='database')
    #使用read_sql函数来读取数据,也可以有其他写法,只是这种更简洁
    def findById(self, sql):
        df = pd.read_sql(sql, con=self.cn)
        return df.values.tolist()

    #这种写法也可以,只是不够简洁
    def update_sql(self, rows):
        sql = "update table set c_iserr=%s where c_id=%s"
        cur = self.cn.cursor()
        cur.executemany(sql, rows)
        self.cn.commit()
        self.cn.close()

    # df是DataFrame格式 ,table_name是写入的目标表名
    '''
    name 指定的是目标数据库表
    con 与数据库链接的方式,推荐使用sqlalchemy的engine类型
    if_exists 当数据库中已经存在数据表时对数据表的操作,有replace替换、append追加,fail则当表存在时提示ValueError
    index 对DataFrame的index索引的处理,=True时索引也将作为数据写入数据表
    chunsize 整数,一次写入数据时的数据行数量
    '''

    def write_sql(self, df, table_name):
        df.to_sql(name=table_name, con=self.cn,
                  if_exists='append', index=False, chunksize=1000)

其中由于调用接口,还需要使用request模块

import requests
import datatime
import json

def getInterface(url):
    riqi = datetime.datetime.now().strftime("%Y/%m")
    text = requests.get(url).text
    #若返回的是字符串,还需json.loads转为dict格式。
    return json.loads(text)

# 数据demo如下
# {"message": "OK", "success": true, "data": [{}]}

三、回填至excel表里

以上新建class类,就可以在接下来的函数调用它。

if __name__ == '__main__':
    sql = "select * from table where id='%s'"
    db = order()
    #此处rows是第一点返回的列表list
    for row in rows:
        result = db.findById(sql % (row[0]))
        #需要切片,转换np.array
        result = np.array(result)
        #todo 逻辑写入
        ......
    
    #再一次将rows转换为dataframe
    df = pd.DataFrame(rows, columns=columns)
    # print(df.head())
    pd.DataFrame(df).to_excel(
        path, sheet_name=sheetname, index=False)

总结,一个小任务,涉及到np.array的切片,panda操作sql和excel,dataframe和list之间转换,datatime和字符串之间转换,json和字符串之间的转换等知识。

感慨python的基础知识需要扎实才行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个高效工作的家伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值