import pandas as pd
import pymysql
import datetime
from sqlalchemy import create_engine

def con_sql(db,sql):
    cursor = db.cursor()
    try:
        cursor.execute(sql)
        result = cursor.fetchall()
        df = pd.DataFrame(list(result))
    except Exception:
        print("发生异常", Exception)
        df = pd.DataFrame()
    finally:
        db.close()
    return df


def multi():
    db = pymysql.connect(host='10.66.157.22', port=4000, user='root', passwd='3SYz54LS9#^9sBvC', db='jerry_prod')
    sql = "select diary_id,level2_ids from diary_feat"
    df = con_sql(db, sql).dropna()
    print(df.shape)
    df = df.rename(columns={0: "cid", 1: "level"})
    df["l1"] = "lost"
    df["l2"] = "lost"
    df["l3"] = "lost"
    for i in list(df["level"].unique()):
        l = [int(j) for j in i.split(";")]
        l = sorted(l)
        if len(l) >= 3:
            df.loc[df["level"] == i, ["l1"]] = l[0]
            df.loc[df["level"] == i, ["l2"]] = l[1]
            df.loc[df["level"] == i, ["l3"]] = l[2]
        elif len(l) == 2:
            df.loc[df["level"] == i, ["l1"]] = l[0]
            df.loc[df["level"] == i, ["l2"]] = l[1]
        elif len(l) == 1:
            df.loc[df["level"] == i, ["l1"]] = l[0]
    df = df.drop("level",axis=1)
    print(df.head())
    # a = list(df["l1"].unique())
    # b = list(df["l2"].unique())
    # c = list(df["l3"].unique())
    # print(len(a))
    # print(a)
    # print(len(b))
    # print(b)
    # print(len(c))
    # print(c)

    yconnect = create_engine('mysql+pymysql://root:3SYz54LS9#^9sBvC@10.66.157.22:4000/jerry_test?charset=utf8')
    n = 200000
    for i in range(0, df.shape[0], n):
        if i == 0:
            temp = df.iloc[0:n]
        elif i + n > df.shape[0]:
            temp = df.iloc[i:]
        else:
            temp = df.iloc[i:i + n]
        pd.io.sql.to_sql(temp, "cid_level2", yconnect, schema='jerry_test', if_exists='append', index=False)
        print("insert done")



if __name__ == "__main__":
    multi()
