[Python] 249 今日、今月、今年、曜日の表記

よく使うのでメモ書きしておきます。

import datetime
import locale

today = datetime.date.today()
this_month = today.month
this_year = today.year

print(f'今日 {today})
print(f'今月 {this_month})
print(f'今年 {this_year})

locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
youbi = today.strftime('%a')

print(f'曜日 {youbi}')
--------------------------------------------------

出力
--------------------------------------------------
今日 2021-04-28
今月 4
今年 2021
曜日 水

[Python] 248 tkinter 22 MySQLツールの拡充 レース検索

期間指定でレース検索ができるようになりました。

日付文字列をハイフン付きに変換してWHERE条件式に代入しました。

検索条件は日付だけでなく、距離、競馬場、条件戦なども追加するつもりです。

使っていて感じるのですが、もしかしたらTARGET Frontierよりも断然早いのでは。

今のところ機能面では話にならないものの、検索速度自体はMySQLに分がありそうです。まあ操作している人間は初学者ですが、一応本式のデータベースですから。

TARGET Frontierは久しく使っていないので、期間限定で再契約しノウハウを学びたいです。

<コードの一部を掲載。なお入力値は自作ライブラリmysql_searchにて処理>

# フレームの作成
frameA = FrameA(master=horse)

# IntVarの初期化
var = tk.IntVar()

for i in range(1000):
    print(f'var for文先頭 {var.get()}')

    children = frameA.winfo_children()

    if var.get() == 0 or var.get() == 1:
        print('分岐A')
        # 馬名の入力を待機
        children[2].wait_variable(var)

        # 入力した馬名を取得
        name = children[1].get()
        print(f'name {name}')

        if name != '':
            # 競走馬成績を検索
            mysql_search.Mysql_search().horse_result(name)

    else:
        print(f'分岐B')

        childrenB = frameB.winfo_children()
        childrenB2 = frameB2.winfo_children()
        childrenB3 = frameB3.winfo_children()

        print(f'frameB_info\n{childrenB}\n')
        print(f'frameB2_info\n{childrenB2}\n')
        print(f'frameB3_info\n{childrenB3}\n')

        # レース名の入力を待機
        childrenB[1].wait_variable(var)

        # 入力したレース名を取得
        race = childrenB[1].get()

        start = childrenB2[0].get()
        if start == '':
            start = '860101'

        end = childrenB3[0].get()
        if end == '':
            end = (datetime.date.today()).strftime("%y%m%d")

        print(f'race {race}')
        print(f'開始日 {start}')
        print(f'終了日 {end}')

        if race != '':
            # レース結果を検索
            mysql_search.Mysql_search().race_result(race,start,end)

frame.mainloop()

[Python] 247 MySQL 10 年月日表記をdate型として取り込む

Y年m月d日と表記された文字列はそのままではdate型として取り込めないため、YYYY-mm-dd表記に変換する必要があります。

<前後は省略>

for file,table,sql in zip(file_l,table_l,sql_l):
    try:
        cur.execute(sql)
    except:
        pass
    else:
        cur.execute('BEGIN')

        # CSVファイルを読み込み、各行をtableに挿入する
        with open(file, 'rt', encoding='Shift-JIS') as f:
            reader = csv.reader(f)
            for i,row in enumerate(reader):
                print(f'row {row}')
                if i != 0:
                    # 年月日の文字列からdatetimeに変換
                    row_str_date_pre = datetime.datetime.strptime(str(row[0]),\
                     '%Y年%m月%d日')
                    # datetimeからハイフン入り年月日の文字列に変換
                    row_str_date = row_str_date_pre.strftime("%Y-%m-%d")
            # 日付とその他を結合してタプルにする
                    row_str = tuple([row_str_date] + row[1:])
                    sql = f'INSERT INTO horse_race_name.{table} VALUES {row_str}'
                    cur.execute(sql)

        cur.execute('COMMIT')