当前位置: 首页 > news >正文

用Flask定制指令上传Excel数据到数据库

用Flask定制指令上传Excel数据到数据库

假设现在有一张员工信息data.xlsx文件

image-20240618104947478

使用SQLAlchemy创表

# ExcelModel.py
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import DeclarativeBaseclass Base(DeclarativeBase):passclass Emp(Base):__tablename__ = 'emp'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(32), nullable=False, index=True)age = Column(Integer, nullable=False)phone = Column(Integer, nullable=False, index=True)if __name__ == '__main__':engine = create_engine("mysql+pymysql://root:1234@localhost/flaskdemo",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置))Base.metadata.create_all(engine)  # 创建表

定义上传类

需要安装pandas模块和openpyxl库

pip install pandas
pip install openpyxl
# getexcel.py
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.orm import Sessionfrom ExcelModel import Empclass ExcelPool:def __init__(self, file):self.file = fileself.engine = create_engine("mysql+pymysql://root:7997@localhost/flaskdemo",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置))def xlsx(self):# 读取Excel文件try:df = pd.read_excel(self.file, sheet_name='Sheet1')for i in range(len(df)):emp = Emp(name=df['姓名'][i],age=df['年龄'][i],phone=df['手机号'][i],)session = Session(self.engine)session.add(emp)session.commit()except FileNotFoundError:print('文件不存在')

定制指令

# FlaskDemo
import click
from flask import Flask
from getexcel import ExcelPool
app = Flask(__name__)# 关键字绑定i
@click.argument('file')
@app.cli.command('create_emp')
# 将i作为参数
def create_user(file):# 传入文件名f = f'{file}.xlsx'ExcelPool(f).xlsx()if __name__ == '__main__':app.run(debug=True)

执行命令

flask --app FlaskDemo:app create_emp data

上传成功

image-20240618105358496

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 常用的sql语句
  • 板凳------56.Linux/Unix 系统编程手册(下) -- SOCKET 介绍
  • 4.2、浏览器请求详解(ajax、fetch、axios使用,手写ajax)
  • 【CTS】android CTS测试
  • Nginx和Tomcat负载均衡、动静分离集群1
  • 【C++】#20,#21
  • Maven下载安装、环境配置(超详细)(包括Windows、IDEA)
  • 解决帝国cms栏目管理拼音乱码的问题
  • 数学建模基础:线性模型
  • MySQL-DML-约束
  • 为何云原生是未来?企业IT架构的颠覆与重构(上)
  • LabVIEW开发中的常见通讯协议详解
  • 【调试笔记-20240618-Windows- Tauri 调试中关闭自动重构的功能】
  • Linux中FTP安装
  • 11、反转链表(含源码)
  • Angular 响应式表单之下拉框
  • egg(89)--egg之redis的发布和订阅
  • Fundebug计费标准解释:事件数是如何定义的?
  • go append函数以及写入
  • Go 语言编译器的 //go: 详解
  • JDK 6和JDK 7中的substring()方法
  • Mysql数据库的条件查询语句
  • vue脚手架vue-cli
  • 码农张的Bug人生 - 见面之礼
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 小程序测试方案初探
  • 阿里云服务器购买完整流程
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • (13):Silverlight 2 数据与通信之WebRequest
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (八)Spring源码解析:Spring MVC
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)fiber的基本认识
  • (分布式缓存)Redis分片集群
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)计算机毕业设计大学生兼职系统
  • (回溯) LeetCode 131. 分割回文串
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (自适应手机端)行业协会机构网站模板
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • *Django中的Ajax 纯js的书写样式1
  • /var/log/cvslog 太大
  • [.net]官方水晶报表的使用以演示下载
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [2016.7 day.5] T2
  • [autojs]autojs开关按钮的简单使用
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [C++]priority_queue的介绍及模拟实现
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [fsevents@^2.1.2] optional install error: Package require os(darwin) not compatible with your platfo
  • [FTP]pureftp部署和优化
  • [HNOI2006]鬼谷子的钱袋
  • [jQuery]使用jQuery.Validate进行客户端验证(中级篇-上)——不使用微软验证控件的理由...