获取假期工作日表
描述
在做考勤方面的数据分析时,需要区分工作日和法定节假日。只凭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写入数据库中。