3009.レース結果でフライング時にテーブルt_result_dのstart_timeに正しい値が設定されていない場合のデータパッチ - takobouzu/BOAT_RACE_DB GitHub Wiki
レース結果でフライング時にテーブルt_result_dのstart_timeに正しい値が設定されていない場合のデータパッチ
2021.03.03以前の180_mkcsv_t_result_d.pyにおいて、フライング時にテーブルt_result_dのstart_timeが正しく登録されていないバグがある。
2021.03.03に180_mkcsv_t_result_d.pyのバグ対策版をリリース済である。
バグによって破損しているレコードのデータバッチSQLは下記のpython3スクリプトを実行することで生成される。 生成されたデータパッチSQLを実行することで、破損したレコードを修復できる。
# python3 mk_data_patch_sql.py
# レース結果においてフライング時にテーブル[t_result_d]にSTが正しく登録されないバグのデータパッチSQLを生成する
# 出力ファイル data_patch_sql
import os
import requests
from bs4 import BeautifulSoup
import sqlite3
BOAT_RACE_DB = 'boatrace.db'
#STが不正なレコードから、開催日・場所コード・レース番号・艇番を取得するSQL
wk_sql = '''
SELECT t_result_d.yyyymmdd,t_result_d.pool_code,t_result_d.race_no,t_result_d.entry_no,t_result_d.start_time
FROM t_result_d
WHERE t_result_d.start_time like '<%'
'''
fw = open('data_patch_sql', 'w')
conn = sqlite3.connect(BOAT_RACE_DB)
cur = conn.cursor()
for row in cur.execute(wk_sql):
out_yyyymmdd = row[0] #開催日
out_poolcode = row[1] #場コード
out_raceno = row[2] #レース番号
out_entryno = row[3] #艇番
out_starttime = row[4] #ST
out_starttime = out_starttime.replace('<span class="table1_boatImage1TimeInner is-fBold is-fColor1">','')
out_rec = "update t_result_d set start_time = " + out_starttime + " "
out_rec = out_rec + "WHERE "
out_rec = out_rec + "yyyymmdd = '" + out_yyyymmdd + "' AND "
out_rec = out_rec + "pool_code = '" + out_poolcode + "' AND "
out_rec = out_rec + "race_no = '" + out_raceno + "' AND "
out_rec = out_rec + "entry_no = '" + out_entryno + "';"
fw.write(out_rec + '\n')
cur.close()
conn.close()
fw.close()
生成されるSQL
update t_result_d set start_time = .09 WHERE yyyymmdd = '20210208' AND pool_code = '15' AND race_no = '11' AND entry_no = '1';
update t_result_d set start_time = .03 WHERE yyyymmdd = '20210208' AND pool_code = '15' AND race_no = '11' AND entry_no = '2';
update t_result_d set start_time = .04 WHERE yyyymmdd = '20210208' AND pool_code = '15' AND race_no = '11' AND entry_no = '3';
update t_result_d set start_time = .04 WHERE yyyymmdd = '20210208' AND pool_code = '15' AND race_no = '11' AND entry_no = '4';
update t_result_d set start_time = .09 WHERE yyyymmdd = '20210208' AND pool_code = '15' AND race_no = '11' AND entry_no = '5';