方式一(推荐):db.session.bulk_insert_mappings(User, users)
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
@app.route('/insert_data', methods=['POST'])
def insert_data():
users = [
{'id': 1, 'name': 'User1'},
{'id': 2, 'name': 'User2'},
{'id': 3, 'name': 'User3'},
# ...
]
db.session.bulk_insert_mappings(User, users)
db.session.commit()
return 'Data inserted successfully'
首先定义一个User模型,然后在insert_data路由中,创建了一个用户列表,每个用户都是一个字典,然后调用bulk_insert_mappings()方法将这些用户插入到数据库中。
注意,bulk_insert_mappings()方法的第一个参数是模型类,第二个参数是一个包含映射的列表。每个映射都是一个字典,其中的键是模型的属性名,值是要插入的值。
最后,调用commit()方法提交事务,将数据保存到数据库中。
方式二:db.session.add_all()
使用db.session.add_all()方法批量插入数据到数据库。这个方法接受一个模型对象的列表,然后将这些对象添加到当前的session中。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
@app.route('/insert_data', methods=['POST'])
def insert_data():
users = [
User(id=1, name='User1'),
User(id=2, name='User2'),
User(id=3, name='User3'),
# ...
]
db.session.add_all(users)
db.session.commit()
return 'Data inserted successfully'
首先定义了一个User模型,然后在insert_data路由中,创建用户对象的列表,然后调用add_all()方法将这些用户添加到当前的session中。
最后,调用commit()方法提交事务,将数据保存到数据库中。
区别:
注意,与bulk_insert_mappings()方法不同,add_all()方法需要创建模型对象,这可能会消耗更多的内存和CPU资源。如果需要插入大量的数据,bulk_insert_mappings()方法可能会更高效。