def create_seasons(session, start_yr, end_yr):
"""
Adds Years and calendar and European Seasons records to database.
:param session: Transaction session object.
:param start_yr: Start of year interval.
:param end_yr: End of year interval, inclusive.
"""
def exists(model, **conditions):
return session.query(model).filter_by(**conditions).count() != 0
logger.info("Creating Years between {0} and {1}...".format(start_yr, end_yr))
year_range = range(start_yr, end_yr+1)
for yr in year_range:
if not exists(Years, yr=yr):
session.add(Years(yr=yr))
session.commit()
session.flush()
logger.info("Creating Seasons...")
# insert calendar year season record
for year in year_range:
try:
yr_obj = session.query(Years).filter_by(yr=year).one()
except NoResultFound:
logger.error("Cannot insert Season record: {} not in database".format(year))
continue
except MultipleResultsFound:
logger.error("Cannot insert Season record: multiple {} records in database".format(year))
continue
if not exists(Seasons, start_year=yr_obj, end_year=yr_obj):
logger.info("Creating record for {0} season".format(yr_obj.yr))
season_record = Seasons(start_year=yr_obj, end_year=yr_obj)
session.add(season_record)
# insert European season record
for start, end in zip(year_range[:-1], year_range[1:]):
try:
start_yr_obj = session.query(Years).filter_by(yr=start).one()
end_yr_obj = session.query(Years).filter_by(yr=end).one()
except NoResultFound:
logger.error("Cannot insert Season record: {} or {} not in database".format(start, end))
continue
except MultipleResultsFound:
logger.error("Cannot insert Season record: multiple {} or {} records in database".format(start, end))
continue
if not exists(Seasons, start_year=start_yr_obj, end_year=end_yr_obj):
logger.info("Creating record for {0}-{1} season".format(start_yr_obj.yr, end_yr_obj.yr))
season_record = Seasons(start_year=start_yr_obj, end_year=end_yr_obj)
session.add(season_record)
session.commit()
logger.info("Season records committed to database")
logger.info("Season creation complete.")
评论列表
文章目录