通过python创建一个日期维度表

文章展示了如何使用Python的pymysql库连接MySQL数据库并插入数据。特别是,它关注了如何处理日期,通过dateutil库的relativedelta函数来增加天数和月份,以实现按月计算日期范围的功能,用于批量插入dim_ahy_manager_date_time表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.要求

3月份,是从2月21日~3月20日,也就是上月21日~当月20日

想要的结果数据:

 2.python代码

import pymysql

from datetime import datetime, date, timedelta
# 导包的时候应该导 python-dateutil 这个包、否者报错
from dateutil.relativedelta import relativedelta
# 使用python连接mysql数据库,并对数据库添加数据的数据的操作
# 创建连接,数据库主机地址 数据库用户名称 密码 数据库名 数据库端口 数据库字符集编码
conn = pymysql.connect(host='****',
                       user='****',
                       password='****',
                       database='****',
                       port=3306,
                       charset='utf8')
print("连接成功")

# 创建游标
cursor = conn.cursor()

# 添加一条数据数据
def insertdata1():
    insert_emp_sql = "insert into dim_consignor_belong (id,consignor,belong_manager,is_count,user_id,company_id) values (199, '陕西泛海贸易有限公司', '朱朝忠', 1, 22272, 142)"
    # 执行语句
    cursor.execute(insert_emp_sql)
    # 提交数据
    conn.commit()


# 批量添加数据
def insertdata2():
    insert_emp_sql = "insert into dim_ahy_manager_date_time (date_time,month_name) values ('{}','{}');"
    # 指定时间的(datetime类型)
    y = datetime.strptime('2020-01-01', '%Y-%m-%d')

    # 插入1000条数据
    for i in range(2000):
        # 对datetime的时间增加
        date_time = (y + timedelta(days=+i)).strftime("%Y-%m-%d")
        date_month = (y + timedelta(days=+i)).strftime("%Y-%m")
        # 得到当月21号的时间
        boundary_date = date_month + '-21'
        # 得到当月的下一个月的时间
        month_date = ((y + timedelta(days=+i)) + relativedelta(months=1)).strftime("%Y-%m")
        # 如果日期下于当月的21号,插入的是当月的月份。 否则的话、插入下个月的月份。
        if (date_time < boundary_date):
            print(date_time,date_month)
            ins_sql = insert_emp_sql.format(date_time, date_month)
            cursor.execute(ins_sql)
            conn.commit()
        else:
            print(date_time, month_date)
            ins_sql = insert_emp_sql.format(date_time, month_date)
            cursor.execute(ins_sql)
            conn.commit()
        # 获取当月的第一天
        # _first_day = (y + timedelta(days=+i)).replace(day=1)

# 关闭游标跟连接
def closeconn():
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()


# try:
    # insertdata1()
insertdata2()
# except:
#     conn.rollback()

closeconn()

3.重点

主要是如何指定日期得到datetime类型的日期

如果对日期增加天

如果对日期增加月

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值