python - 如何使用 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