因此,我目前正在尝试建立一个新的应用程序使用flask restful的后端,我仍然在学习,因为所有这一切对我来说是相当新的。我已经用几个不同的mysql表设置了所有的东西,下面详细介绍了它们之间的关系,看起来一切都很好,只是插入新数据的过程非常慢。
以下是我对当前设置的(简化)解释。基本上,我首先有一张航班表。
class FlightModel(db.Model):
__tablename__ = "Flights"
flightid = db.Column(db.Integer, primary_key = True, nullable=False)
[Other properties]
reviewid = db.Column(db.Integer, db.ForeignKey('Reviews.reviewid'), index = True, nullable = False)
review = db.relationship("ReviewModel", back_populates="flight", lazy='joined')
然后,这个表指向一个reviews表,我在其中存储用户留下的全局评论。
class ReviewModel(db.Model):
__tablename__ = "Reviews"
reviewid = db.Column(db.Integer, primary_key = True, nullable = False)
[Other properties]
depAirportReviewid = db.Column(db.Integer, db.ForeignKey('DepAirportReviews.reviewid'), index=True, nullable = False)
arrAirportReviewid = db.Column(db.Integer, db.ForeignKey('ArrAirportReviews.reviewid'), index=True, nullable = False)
airlineReviewid = db.Column(db.Integer, db.ForeignKey('AirlineReviews.reviewid'), index=True, nullable = False)
flight = db.relationship("FlightModel", uselist=False, back_populates="review", lazy='joined')
depAirportReview = db.relationship("DepAirportReviewModel", back_populates="review", lazy='joined')
arrAirportReview = db.relationship("ArrAirportReviewModel", back_populates="review", lazy='joined')
airlineReview = db.relationship("AirlineReviewModel", back_populates="review", lazy='joined')
然后,可以在另一个表(例如,在下面的depairportreviews表中:此级别共有三个表)中对航班的不同方面进行更详细的检查。
class DepAirportReviewModel(db.Model):
__tablename__ = "DepAirportReviews"
reviewid = db.Column(db.Integer, primary_key = True, nullable = False)
[Other properties]
review = db.relationship("ReviewModel", uselist=False, back_populates="depAirportReview", lazy='joined')
插入过程很慢(每次飞行通常需要1秒来插入,当我尝试批量插入几百个时这是一个问题)。
我理解这是因为所有这些关系以及它所暗示的数据库的所有访问,以便为不同的表检索不同的id。对吗?我能做些什么来解决这个问题,或者我需要重新设计表来消除其中的一些关系吗?
谢谢你的帮助!
编辑:直接显示执行的sql显示了我的预期:每次插入总共执行7个简单的查询,每次大约需要300毫秒。这相当长,我猜主要是由于到达服务器的时间。除了删除外键什么也做不了,对吧?
暂无答案!
目前还没有任何答案,快来回答吧!