sqlalchemy批量添加数据-数据源是json(小算法)
需求:
想要写1个增加case的接口
问题:
sqlalchemy添加case的方式,只能是1条数据1条数据的插入,像这样:
1 ro2 = Role(name='user')
2 db.session.add_all([ro1])
3 db.session.commit()
我希望的效果是这样的:
我传入一个字典{'name':'lisa'},然后自动转化成name=‘lisa’这样的格式
接口的参数是一组dict类型的数据,每一组数据即视为1条case,通过程序将json传过来的数据对号入座
1 a=[{'name':'lisa'},{'name':'bob'}] 2 3 case=[] 4 for i in a: #i={'name':'lisa'} 5 name=i['name'] #name='lisa' 6 7 obj = Role(name=name)#obj=<Role 'lisa'> 8 case.append(obj) 9 print(case)#[<Role 'lisa'>, <Role 'bob'>] 10 db.session.add_all(case) 11 db.session.commit()
完整的代码如下:
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 from flask import Flask
5 from flask_sqlalchemy import SQLAlchemy
6
7 app = Flask(__name__)
8
9 # 设置连接数据库的URL
10 app.config['SQLALCHEMY_DATABASE_URI'] ='mysql+mysqlconnector://root:admin123456@10.1.71.32:3306/test'
11
12 # 设置每次请求结束后会自动提交数据库的改动
13 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
14 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
15
16 # 查询时显示原始SQL语句
17 app.config['SQLALCHEMY_ECHO'] = False
18 db = SQLAlchemy(app)
19
20
21 class Role(db.Model):
22 __tablename__ = 'roles'
23 id = db.Column(db.Integer, primary_key=True)
24 name = db.Column(db.String(64))
25
26 def __repr__(self):
27 return '<Role %r>' % self.name
28
29
30 #数据源-要批量添加的case数据 list套dict
31 a=[{'name':'lisa'},{'name':'bob'}]
32
33 case=[]
34 for i in a: #i={'name':'lisa'}
35 name=i['name'] #name='lisa'
36
37 obj = Role(name=name)#obj=<Role 'lisa'>
38 case.append(obj)
39 print(case)#[<Role 'lisa'>, <Role 'bob'>]
40 db.session.add_all(case)
41 db.session.commit()
结果:可以循环插入多条数据