MySQL使用SQLAlchemy ORM进行批量插入
在开发过程中,我们经常需要从多个源(如Excel、CSV文件、其他数据库)中导入数据并将其存储在MySQL数据库中。在这种情况下,将数据逐一插入到数据库中会非常耗时,导致效率低下。幸运的是,SQLAlchemy提供了一种更有效的方法:批量插入。
阅读更多:MySQL 教程
安装必要的库
在使用SQLAlchemy ORM批量插入数据之前,需要确保安装以下两个库:
- SQLAlchemy
- pymysql
这两个库都可以通过pip包管理器轻松安装。
pip install SQLAlchemy pymysql
使用SQLAlchemy ORM进行批量插入
假设有以下产品表:
CREATE TABLE `products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`price` decimal(10,2) DEFAULT NULL,
`category_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
现在,我们将使用SQLAlchemy ORM从一个名为products.csv的CSV文件中读取数据并将其批量插入到MySQL数据库中。以下是示例代码:
from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import csv
Base = declarative_base()
class Product(Base):
__tablename__ = 'products'
id = Column(Integer, primary_key=True)
name = Column(String(255))
description = Column(String(255))
price = Column(Float)
category_id = Column(Integer)
engine = create_engine('mysql+pymysql://user:password@localhost:3306/database_name?charset=utf8')
Session = sessionmaker(bind=engine)
session = Session()
with open('products.csv', 'r') as csvfile:
products = csv.DictReader(csvfile)
objects = []
for row in products:
objects.append(Product(**row))
session.bulk_save_objects(objects)
session.commit()
该示例从CSV文件中读取产品数据并将其存储在名为“objects”的Python列表中。然后,我们可以使用“bulk_save_objects”方法将整个列表一次性插入到数据库中,从而实现批量插入。
总结
在本文中,我们介绍了在MySQL中使用SQLAlchemy ORM进行批量插入的过程。该方法可以显著提高向数据库插入大量数据的效率。现在,您可以使用此方法将来自多个源的数据批量导入到MySQL数据库中。
极客教程