【Python】读取Excel表格动态生成MySQL数据表并插入数据

在这里插入图片描述

# coding: utf-8
import pymysql, xlrd
from sqlalchemy import create_engine, Column, Integer, SmallInteger, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

"""
    读取Excel动态生成数据表/字段,并插入记录
"""


def make_model(Base, _TABLE_NAME, TABLE_COMMENT):
    class table_model(Base):
        __tablename__ = _TABLE_NAME
        id=Column(Integer,primary_key=True)
        # __table_args__ = (Index('index(zone,status)', 'resource_zone', 'resource_status'), \
        # {'comment': '压测资源表'})  # 添加索引和表注释
        __table_args__ = ({'comment': TABLE_COMMENT})
    return table_model

"""
    连接数据库
"""
engine = create_engine("mysql+pymysql://root:123456@127.0.0.1/flasktest", encoding='utf8', echo=True)

"""
    读取excel
"""
workbook = xlrd.open_workbook("./table.xls")
sheet = workbook.sheet_by_index(0)
nrows = sheet.nrows
ncols = sheet.ncols
table_name = sheet.cell_value(0,0)
table_comment = sheet.cell_value(0,1)

"""
    创建数据表
"""
Base = declarative_base()
table = make_model(Base, table_name, table_comment)

for i in range(0, ncols):
    field_name = sheet.cell_value(1, i)
    field_type = sheet.cell_value(2, i)
    field_comment = sheet.cell_value(3, i).strip().replace('\n', '').replace('\r', '')
    print(field_name, field_type, field_comment)
    if field_type=="Integer":
        setattr(table, field_name, (Column(field_name, Integer, comment=field_comment)))

Base.metadata.create_all(engine)


"""
    连接数据表,插入数据
"""
DBSession = sessionmaker(bind=engine)
session = DBSession()

datas = []
for i in range(5, nrows):
    data = table()
    for j in range(0, ncols):
        field_name = sheet.cell_value(1, j)
        field_value = sheet.cell_value(i, j)
        setattr(data, field_name, field_value)
    datas.append(data)
session.add_all(datas)
session.commit()

# show create table xxx;
# 查看带注释的表信息


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值