华山轮贱

python sqlite的使用心得 _insert

def jzbm_insert(p1):
    #
    arr_col=['受种者编码', '受种者姓名', '受种者性别', '出生日期', '身份证', '电话号码', '住址', '工作单位', '人群分类', '人群分类2']
    key="受种者编码"
    tablename="user"
    #

    con1=create_engine("sqlite:///db/test.db")
    if con1.has_table(tablename)==False:
        p2=pd.DataFrame(columns=arr_col)
        for q in arr_col:
            if q in p1.columns:
                p2[q]=p1[q]
        p2.to_sql(tablename,con1,index=False)
    else:
        #
        p2=pd.DataFrame()
        for q in arr_col:
            if q in p1.columns:
                p2[q]=p1[q]
        #
        if key in p2.columns:
            str1=list_to_string(p2[key].to_list())
            sql1='''
            select {0} from {1}
            WHERE {0} IN ({2})
            '''.format(key,tablename,str1)
            d1=pd.read_sql(sql1,con1)
            #
            p21=p2.loc[
                p2[key].isin(d1[key])
            ]
            for q in p21.index:
                ps21=p21.loc[q]
                str1=""
                for w in p21.columns:
                    if (w!=key)&(pd.isna(ps21[w])==False):
                        if str1=="":
                            str1="{0}='{1}'".format(w,ps21[w])
                        else:
                            str1=str1+",{0}='{1}'".format(w,ps21[w])
                sql2='''
                UPDATE {0}
                SET {1}
                WHERE {2}='{3}';
                '''.format(tablename,str1,key,ps21[key])
                con1.execute(sql2)
                #break
            #
            p22=p2.loc[
                (p2[key].isin(d1[key]))==False
            ]
            if len(p22)>0:
                p22.to_sql(tablename,con1,if_exists="append",index=False)

  

posted on 2022-04-24 02:07  华山轮贱  阅读(282)  评论(0编辑  收藏  举报

导航