使用Flask-SQLAlchemy将csv、json格式数据插入mysql数据库





一、获取Flask、SQLAlchemy实例,绑定Flask实例

db = SQLAlchemy()
db.init_app(app) 

其中app来自工厂函数

def create_app(app):
    app = Flask(__name__)
    app.config.from_object(Config)
    config_extensions(app)
    return app


二、插入csv文件中的数据

数据文件:mysql.csv(h3c套一提供数据)

1.声明orm关系映射

# -*- coding:utf-8 -*-
# Created by ZhaoWen on 2020/10/25

from app.models import db

class Tbl_hotel_test(db.Model):
    __tablename__ = 'tbl_hotel_test'
    seq = db.Column(db.String(30),primary_key=True) #SEQ
    hotel_name = db.Column(db.String(100)) #酒店名称
    country = db.Column(db.String(50)) #国家
    province = db.Column(db.String(50)) #省份
    city = db.Column(db.String(50)) #城市
    business_district = db.Column(db.String(100)) #商圈
    start = db.Column(db.String(30)) #星级
    department = db.Column(db.String(50)) #业务部门
    rooms = db.Column(db.Integer) #房间数字
    photos = db.Column(db.Integer) #图片数
    score = db.Column(db.DECIMAL(15,12)) #评分
    content = db.Column(db.Integer) #评论数
    city_avg_night = db.Column(db.DECIMAL(6,2)) #城市平均实住间夜
    hotel_total_order = db.Column(db.Integer) #酒店总订单
    hotel_total_night = db.Column(db.Integer) # 酒店总间夜
    hotel_right_order = db.Column(db.Integer) # 酒店实住订单
    hotel_right_night = db.Column(db.Integer) # 酒店实住间夜
    hotel_direct_order = db.Column(db.Integer) #酒店直销订单
    hotel_direct_night = db.Column(db.Integer) #酒店直销间夜
    hotel_direct_right_order = db.Column(db.Integer) #酒店直销实住订单
    hotel_direct_right_night = db.Column(db.Integer) #酒店直销实住间夜
    hotel_direct_refuse_order = db.Column(db.Integer) #酒店直销拒单
    hotel_direct_refuse_pie = db.Column(db.String(20)) #酒店直销拒单率
    city_direct_order = db.Column(db.Integer) #城市直销订单
    city_direct_Refuse_pie = db.Column(db.String(20)) #城市直销拒单率
    directcity_issmall = db.Column(db.Integer) #拒单率是否小于等于直销城市均值

2.插入数据

@main_print.route('/addData')
def main_add():
    print('开始插入')
    with open('app/static/data/mysql.csv','r',encoding='utf-8') as f:
        reader = csv.reader(f)
    if reader != None:
        for i in reader:
            hotel = Tbl_hotel_test(seq=i[0],hotel_name=i[1],country=i[2],province=i[3],city=i[4],business_district=i[5],start=i[6],department=i[7],
                           rooms=i[8],photos=i[9],score=i[10],content=i[11],city_avg_night=i[12],hotel_total_order=i[13],hotel_total_night=i[14],
                           hotel_right_order=i[15],hotel_right_night=i[16],hotel_direct_order=i[17],hotel_direct_night=i[18],hotel_direct_right_order=i[19],
                           hotel_direct_right_night=i[20],hotel_direct_refuse_order=i[21],hotel_direct_refuse_pie=i[22],city_direct_order=i[23],city_direct_Refuse_pie=i[24],
                           directcity_issmall=i[25])
            db.session.add(hotel)
        # return render_template('/test/test-data.html',reader = reader)
        db.session.commit()
        return render_template('/test/sucess.html',content='插入成功')
    return ''

3. 效果

在这里插入图片描述



三、插入json中的数据

1.ORM关系映射

# -*- coding:utf-8 -*-
# Created by ZhaoWen on 2020/10/25

from app.models import db

'''
城市,公司全名,公司ID,公司简称,公司大小,公司所在商区,职位所属 ,教育要求,公司所属领域 ,职位ID,职位福利,职位名称,薪水,工作年限要求
'''

class Tbl_zp(db.Model):
    __tablename__ = 'tbl_zp_test'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True) #序号
    company_id = db.Column(db.Integer) # 公司id
    city = db.Column(db.String(20)) # 城市
    conpany_name = db.Column(db.String(50)) # 公司全名
    conpany_simple_name = db.Column(db.String(20)) # 公司简称
    conpany_size = db.Column(db.String(20)) # 公司大小
    conpany_area = db.Column(db.String(50)) #公司所在商圈
    job_category = db.Column(db.String(20)) #职位所属分类
    school_level = db.Column(db.String(10)) #教育要求
    conpany_category = db.Column(db.String(20)) # 公司所属领域
    job_id = db.Column(db.String(20)) #职位id
    job_get = db.Column(db.String(200)) # 职位福利
    job_name = db.Column(db.String(50)) # 职位名称
    job_salary = db.Column(db.String(20)) # 薪资
    job_year = db.Column(db.String(50)) #工作年限要求

2.插入数据

@main_print.route('/addData2')
def main_add2():
    print('开始插入')
    result = []
    with open('app/static/data/zpdata.json',encoding='utf-8') as f:
            result.append(json.load(f))
            if result != None:
                for r in result:
                    for i in r:
                        '''
                        城市,公司全名,公司ID,公司简称,公司大小,公司所在商区,职位所属 ,教育要求,公司所属领域 ,职位ID,职位福利,职位名称,薪水,工作年限要求
                        '''
                        try:
                            zp = Tbl_zp(city=i['城市'], conpany_name=i['公司全名'], company_id=i['公司ID'],
                                        conpany_simple_name=i['公司简称']
                                        , conpany_size=i['公司大小'], conpany_area=i['公司所在商区'], job_category=i['职位所属'],
                                        school_level=i['教育要求'], conpany_category=i['公司所属领域'], job_id=i['职位ID'],
                                        job_get=i['职位福利'],
                                        job_name=i['职位名称'], job_salary=i['薪水'], job_year=i['工作年限要求'])
                            db.session.add(zp)
                        except:
                            db.session.delete(zp)
                    db.session.commit()
                # return render_template('test/json-show.html',result = result)
                return render_template('/test/sucess.html', content='插入成功')
            return ''

3.效果

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值