MySQL使用SQLAlchemy ORM进行批量插入

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数据库中。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程