【Flask】从Excel中批量导入数据

来源:互联网 发布:盘锦网络维护培训学校 编辑:程序博客网 时间:2024/05/17 03:45

概述

在Flask开发中需要批量导入数据,数据是用Excel保存的。所以在网上搜索了下资料,提取Excel里的数据可以使用xlrd包。这篇文章主要是记录Flask从Excel批量导入数据到数据库的方法。

开发环境

Python版本:3.5.1
操作系统:win10 x64

xlrd

首先是安装命令:

pip install xlrd

代码清单

然后下面放上代码清单,以后做项目的时候可以直接移植。

目录结构

  • app
    • data-dev.sqlite
    • demo.py
    • model.py
    • people.xlsx
    • init.py
  • venv

app是放置flask应用的地方,venv是Python的虚拟环境。

__init__.py

import osfrom flask import Flaskfrom flask_sqlalchemy import SQLAlchemybasedir = os.path.abspath(os.path.dirname(__file__))app = Flask(__name__)app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=Trueapp.config['SQLALCHEMY_DATABASE_URI'] = \    'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')db = SQLAlchemy(app)

model.py

存放数据表的地方

from app import dbclass People(db.Model):    __tablename__ = 'peoples'    def __repr__(self):        return "<%r %r %r>" % (self.id, self.name, self.age)    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String)    age= db.Column(db.Integer)

demo.py

示例程序,这里只是作为一个演示,根据项目需要可以把导入数据的代码放在flask的manage命令里。

import osfrom app import dbfrom xlrd import open_workbookfrom app.model import PeopleexcelName = "people.xlsx"bk = open_workbook(excelName, encoding_override="utf-8")# for s in bk.sheets():# print "sheet:",s.name# 创建数据表db.create_all()try:    sh = bk.sheets()[0]  # 因为Excel里只有sheet1有数据,如果都有可以使用注释掉的语句    # sh = bk.sheet_by_name("benke.xlsx")except:    print("no sheet in %s named sheet1" % excelName)else:    nrows = sh.nrows    ncols = sh.ncols    print(os.getcwd(), "行数 %d,列数 %d" % (nrows, ncols))    row_list = []    for i in range(1, nrows):        row_date = sh.row_values(i)        print(row_date)        n = i - 1        people = People()        people.id = row_date[0]        people.name = row_date[1]        people.age = row_date[2]        db.session.add(people)    db.session.commit()    db.session.close()peoples = People.query.all()print(peoples)

如果之前没有创建数据表,则首先要db.create_all()语句创建数据表。

打印测试

F:\Python_Demo\importDataToDBFromExcel\app 行数 5,列数 3
[1.0, ‘小明’, 12.0]
[2.0, ‘小红’, 13.0]
[3.0, ‘小刚’, 15.0]
[4.0, ‘小乖’, 16.0]
[<1 ‘小明’ 12>, <2 ‘小红’ 13>, <3 ‘小刚’ 15>, <4 ‘小乖’ 16>]

前面四行是print(row_date)的打印,说明提取数据成功;
最后一行是print(peoples)的打印,说已经成功入库。

0 0
原创粉丝点击