获取假期工作日表

描述

在做考勤方面的数据分析时,需要区分工作日和法定节假日。只凭SQL的运算无法达成目的。
只能从网上获取节假日表

这里写了一段python来实现从网上下载节假日表上传到数据库这个功能,要求数据库服务器能连接互联网。

详情

# -*- coding: utf-8 -*-
"""
Created on Fri Mar 11 10:44:56 2022

@author: kang
"""

import requests
import pandas as pd
import pymysql
import sys
import sqlalchemy
from urllib.parse import quote_plus as urlquote

# 获取数据库地址和端口
if sys.platform=='linux':
    dbHost = 'XXX.168.0.XXX'
    dbPort = 3306
else:
    dbHost = 'XXX.52.XXX.12'
    dbPort = XXXX

userName = 'yonghuming'
password = 'mima'
dbName = 'shujuku'

# urlquote 用来将账号密码中的特殊符号转码,不然sqlalchemy创建engine时会报错
DB_CONNECT = f'mysql+pymysql://{userName}:{urlquote(password)}@{dbHost}:{dbPort}/{dbName}'

# 使用sqlalchemy创建数据库连接
engine = sqlalchemy.create_engine(
        DB_CONNECT,
        max_overflow=50,  # 超过连接池大小外最多创建的连接
        pool_size=50,  # 连接池大小
        pool_timeout=5,  # 池中没有线程最多等待的时间,否则报错
        pool_recycle=-1,  # 多久之后对线程池中的线程进行一次连接的回收(重置)
        encoding='utf-8',
        echo=False
    )

# 获取节假日函数
def ins_wd(year:int):
'''
输入年份,将改年的节假日日历插入数据库中wd_hd_info表格
'''
    r=requests.get(f'https://api.apihubs.cn/holiday/get?field=date,weekend,workday&year={year}&cn=1&size=1000')
    d=r.json()
    
    lines=d['data']['list']
    
    df=pd.DataFrame(lines)
    
    df.to_sql('wd_hd_info', engine,index=False,if_exists='append')

# 插入2022年节假日数据到前面engine连接的数据库的wd_hd_info表中
ins_wd(2022)

总结

这里使用了一个网上的接口:api.apihubs.cn ,点赞开发者
使用sqlalchemy创建数据库连接;使用requests库从接口获得数据,转换成pandas的df,再使用to_sql方法将df写入数据库中。

posted @ 2022-05-07 17:14  菲克纽斯  阅读(132)  评论(0编辑  收藏  举报