首页 > 解决方案 > 如何使用 AWS Lightsail 提高 Python SQLAlchemy 性能?

问题描述

我对使用 SQLAlchemy 和 AWS Lightsail 缓慢插入行感到非常惊讶,以至于我相信我一定做错了什么。

我可以通过 MySQL Workbench 执行 SQL 命令,它们可以在几分之一秒内处理,我可以使用本地 sqlite db,而且速度非常快。使用 Lighsail 进行相同的插入需要 > 14 秒,并且 1500 行并不觉得过多。我很感激有人不会有 1500 封电子邮件,这只是一个简单的例子。

我做这一切都是错的吗?有一种更有效的添加/提交/使用 Lightsail 的方法,还是性能实际上很差?

# sqlite example
# Adding:  0:00:00.254232

# aws (Lightsail Database) 
# Adding:  0:00:14.022152

我的代码只是使用教程中的简单示例的基本代码:

from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref, sessionmaker

import datetime

Base = declarative_base()

class Person(Base):
    __tablename__ = 'person'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    addresses = relationship('Address', backref='person',
                                lazy='dynamic')

class Address(Base):
    __tablename__ = 'address'
    id = Column(Integer(), primary_key=True)
    email = Column(String(50))
    person_id = Column(Integer(), ForeignKey('person.id'))

address_list = []
for email in range(1,1500):
    a = Address(email=str(email)+"@hotmail.com")
    address_list.append(a)

p = Person(name='foo', addresses=address_list)
# engine = create_engine("mysql+pymysql://username:password@lrds.amazonaws.com/awstest")
engine = create_engine("sqlite:///testing.sqlite")
Base.metadata.create_all(engine, checkfirst=True)

Session = sessionmaker(bind=engine)

time_start = datetime.datetime.now()
session = Session()
session.add(p)
session.commit()
time_end = datetime.datetime.now()
time_difference = time_end - time_start
print("Adding: ", time_difference)
print(p.addresses.count())

# sqlite example
# Adding:  0:00:00.254232

# aws (Lightsail Database) 
# Adding:  0:00:14.022152

标签: pythonsqlalchemyamazon-lightsail

解决方案


推荐阅读