如何解决mysql 上的表关系计算新字段
我会解释我的结构,但首先我会告诉我我需要什么。我有一张包含预测的表格和一个包含真实情况数据的表格。我需要计算 forecast - happened
字段。两个表都有坐标字段 (lon,lat)、日期和降水。 Forecast 还有一个字段,即进行预测的日期。
class Real(Base):
__tablename__ = 'tbl_real'
id = Column(Integer,primary_key=True,autoincrement=True)
lon = Column(Integer,index=True)
lat = Column(Integer,index=True)
date = Column(DATE,index=True)
prec = Column(Integer)
class Forecast(Base):
__tablename__ = 'tbl_forecast'
id = Column(Integer,autoincrement=True)
real_id = Column(Integer,ForeignKey('tbl_real.id'))
date_pub = Column(DATE,index=True)
date_prev = Column(DATE,index=True)
lon = Column(Integer,index=True)
lat = Column(Integer,index=True)
prec = Column(Integer,)
class Error(Base):
__tablename__ = 'tbl_error'
id = Column(Integer,primary_key=True)
forecast_id = Column(Integer,ForeignKey('tbl_forecast.id'))
real_id = Column(Integer,ForeignKey('tbl_realizado.id'))
error = Column(Integer)
要在我使用的 Error
上插入数据:
def insert_error_by_coord_data(self,real_id,lon,lat,date,prec,session):
ec_ext = session.query(Forecast.id,Forecast.prec).filter((Forecast.lon == lon)&
(Extendido.lat == lat)&
(Extendido.date_prev == date)).all()
data = list()
for row in ec_ext:
id = row[0]
if session.query(Erro).get(id) is None:
prev = comb[1]
error = prev - prec
data.append(Erro(id = id,ext_id = id,real_id = real_id,error= error))
if len(data) > 0:
session.bulk_save_objects(objects=data)
session.commit()
session.close()
每个预测文件都有 40 个 data_prev
和 25000 个坐标。每个真实文件有 25000 个坐标。我想了大约 2 个小时,我在 Error
上只有 80000 行。插入记录开始需要 1.03 秒,现在是 3.04 秒。我正在使用带有 multiprocessing
的 12 cpu,如果您认为错误在这里,请指出,我可以显示代码,但我认为不是。
问题是我应该怎么做?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。