libs.functions.tools.member
libs/functions/tools/member.py
1""" 2libs/functions/tools/member.py 3""" 4 5import logging 6 7import pandas as pd 8 9import libs.global_value as g 10from libs.data import modify 11from libs.utils import dbutil 12 13 14def export_data(): 15 """メンバー情報エクスポート""" 16 if g.args.export_data: 17 for table in ("member", "alias", "team"): 18 csvfile = f"{g.args.export_data}_{table}.csv" 19 20 match table: 21 case "member": 22 sql = f"select name, slack_id, flying, reward, abuse, team_id from {table} where id != 0;" 23 case _: 24 sql = f"select * from {table};" 25 26 df = pd.read_sql(sql, dbutil.get_connection()) 27 # 整数値を維持 28 if "team_id" in df.columns: 29 df["team_id"] = df["team_id"].astype("Int64") 30 31 df.to_csv(csvfile, index=False) 32 logging.notice("export data: %s -> %s", table, csvfile) # type: ignore 33 34 35def import_data(): 36 """メンバー情報インポート""" 37 if g.args.import_data: 38 modify.db_backup() 39 conn = dbutil.get_connection() 40 for table in ("member", "alias", "team"): 41 csvfile = f"{g.args.import_data}_{table}.csv" 42 conn.execute(f"delete from {table};") 43 44 if table == "member": 45 conn.execute(f"delete from sqlite_sequence where name='{table}';") 46 conn.execute("insert into member (id, name) values (0, ?)", (g.cfg.member.guest_name,)) 47 48 try: 49 pd.read_csv(csvfile).to_sql( 50 table, 51 conn, 52 if_exists="append", 53 index=False, 54 ) 55 logging.notice("import data: %s -> %s", csvfile, table) # type: ignore 56 except FileNotFoundError: 57 logging.notice("skip: %s (not found)", csvfile) # type: ignore 58 except pd.errors.EmptyDataError: 59 logging.notice("skip: %s (empty file)", csvfile) # type: ignore 60 61 # aliasテーブルが空の場合は作り直す 62 alias_list = conn.execute("select name from alias;").fetchall() 63 member_list = conn.execute("select name, name from member where id != 0;").fetchall() 64 if not alias_list: 65 logging.warning("create new alias table") 66 for name in member_list: 67 conn.execute("insert into alias(name, member) values (?,?);", name) 68 69 conn.commit() 70 conn.close()
def
export_data():
15def export_data(): 16 """メンバー情報エクスポート""" 17 if g.args.export_data: 18 for table in ("member", "alias", "team"): 19 csvfile = f"{g.args.export_data}_{table}.csv" 20 21 match table: 22 case "member": 23 sql = f"select name, slack_id, flying, reward, abuse, team_id from {table} where id != 0;" 24 case _: 25 sql = f"select * from {table};" 26 27 df = pd.read_sql(sql, dbutil.get_connection()) 28 # 整数値を維持 29 if "team_id" in df.columns: 30 df["team_id"] = df["team_id"].astype("Int64") 31 32 df.to_csv(csvfile, index=False) 33 logging.notice("export data: %s -> %s", table, csvfile) # type: ignore
メンバー情報エクスポート
def
import_data():
36def import_data(): 37 """メンバー情報インポート""" 38 if g.args.import_data: 39 modify.db_backup() 40 conn = dbutil.get_connection() 41 for table in ("member", "alias", "team"): 42 csvfile = f"{g.args.import_data}_{table}.csv" 43 conn.execute(f"delete from {table};") 44 45 if table == "member": 46 conn.execute(f"delete from sqlite_sequence where name='{table}';") 47 conn.execute("insert into member (id, name) values (0, ?)", (g.cfg.member.guest_name,)) 48 49 try: 50 pd.read_csv(csvfile).to_sql( 51 table, 52 conn, 53 if_exists="append", 54 index=False, 55 ) 56 logging.notice("import data: %s -> %s", csvfile, table) # type: ignore 57 except FileNotFoundError: 58 logging.notice("skip: %s (not found)", csvfile) # type: ignore 59 except pd.errors.EmptyDataError: 60 logging.notice("skip: %s (empty file)", csvfile) # type: ignore 61 62 # aliasテーブルが空の場合は作り直す 63 alias_list = conn.execute("select name from alias;").fetchall() 64 member_list = conn.execute("select name, name from member where id != 0;").fetchall() 65 if not alias_list: 66 logging.warning("create new alias table") 67 for name in member_list: 68 conn.execute("insert into alias(name, member) values (?,?);", name) 69 70 conn.commit() 71 conn.close()
メンバー情報インポート