python环境安装、读取excel数据插入数据库demo

环境安装

安装包python-3.8.2-amd64.exe

链接:https://pan.baidu.com/s/1GP2gy3HSU2dgq0Sb2y4xJA
提取码:6wnv
–来自百度网盘超级会员V4的分享

image-20211206221230829

image-20211206221248730

image-20211206221305348

编辑器pycharm

链接:https://pan.baidu.com/s/1fCMV8zZVxJ1Bcq259wmy2A
提取码:0fil
–来自百度网盘超级会员V4的分享

激活与idea同理,下载jetbrains-agent_2019.3.1.jar Custom VM…最后一行添加文件路径

-javaagent:G:\PyCharm 2019.3.1\jetbrains-agent_2019.3.1.jar

image-20211206222131867

开发中…

语法错误

声明主函数没有调用或者调用名称要定格不能留有空格pydev debugger: process 16608 is connecting

image-20211206222722008

利用sqlacodegen自动生成ORM实体类

安装sqlacodegen: pip install sqlacodegen

自动生成命令: sqlacodegen mysql://{用户名}:{密码}@{数据库链接地址}:{端口号}/{数据库} > {自定义文件名}.py

报错安装: pip install mysqlclient

读取excel

读取文件

# 路径注意转义  一定要加sheet_name=None,才能读取出所有的sheet,否则默认读取第一个sheet,且获取到的keys是第一行的值
# 如果异常  左上角 File-->Settings--->project -->+号搜索安装openpyxl
df = pd.read_excel(file_name, sheet_name=None)

遍历文件 按sheet

for i in df.keys():
    dataNone = pd.read_excel(file_name,sheet_name=i, usecols=None)
    columns = dataNone.columns

遍历sheet 按行获取数据

# 获取行号的索引,并对其进行遍历:
for di in dataNone.index.values:
    # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
    for index,column_data in enumerate(dataNone.values[di]):
        #value值  column_data
        #列名
        column=columns[index]
        #转int
        if column in date_columns and column_data:
           column_data = int(column_data)
        #转None值
        if (isinstance(column_data, float) and math.isnan(column_data)) or str(column_data) == 'nan':
            column_data = None
        

插入数据库

log.info("开始写入数据库...")
# sqlacodegen 生成的文件SCbtMapping
insert_type = SCbtMapping.__table__.insert()
table_name = SCbtMapping.__tablename__
session = sessionmaker(engine)()
try:
	# 批量分页删除
    if del_conditions:
        del_len = len(del_conditions)
        del_count = 0
        while del_count < del_len:
            del_condition = del_conditions[del_count:del_count + 500]
            session.execute(f"delete from {table_name} where {' or '.join(del_condition)}")
            del_count += 500
    # 插入数据
    session.execute(
        insert_type,
        result_data
    )
    session.commit()
except Exception as e:
    log.error(e)
    log.error("插入BO数据库失败")
    session.rollback()
    raise e
finally:
    session.close()
    log.info("数据库插入结束")
r(e)
    log.error("插入BO数据库失败")
    session.rollback()
    raise e
finally:
    session.close()
    log.info("数据库插入结束")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值