【问题标题】:new column creation in existing table and updating the column using python在现有表中创建新列并使用 python 更新列
【发布时间】:2018-08-22 13:13:20
【问题描述】:

在这里,我试图将一个表与 2 个具有数百万条记录的表进行比较,所以我想分别比较 dem 并在主表“表”名称状态中创建一个单独的列,以便我可以自行更新

步骤:在主表中的电子邮件名称“status”旁边创建一个新列

step2:必须在与 tab1、tab2 表比较时更新该列

list_of_tables=['tab1','tab2'] 
for tab in list_of_tables:
    cursor.execute("select main.*,if({}.email is not null ,'MATCH','NONMATCH') stataus from main left join {} on main.email={}.email".format(tab,tab,tab))
     data_2 = cursor.fetchall()
     print data_2
     data3=list(data_2)
     data_3=pd.DataFrame(data3)
     upload(ftp,data_3,FILEPATH)

def upload(ftp,data_3,FILEPATH):
    data_4=data_3.to_csv(Out_file,index=False,header=None)


main:

email
abc@gamil.com
xyz@email.com
ijk@gmail.com
ghi@gmail.com
pqr@gmail.com
yup@gmail.com
tab1:

email
ijk@gmail.com
yup@gmail.com
tab2:

email
xyz@email.com
pqr@gmail.com

必填结果

email           valid
abc@gamil.com   non-match
xyz@email.com   match
ijk@gmail.com   match
ghi@gmail.com   non-match
pqr@gmail.com   match
yup@gmail.com   match

but getting like dis:

abc@gamil.com       non-match
xyz@email.com       non-match
ijk@gmail.com       match
ghi@gmail.com       non-match
pqr@gmail.com       non-match
yup@gmail.com       match
abc@gamil.com       nonmatch
xyz@email.com       match
ijk@gmail.com       nonmatch
ghi@gmail.com       nonmatch
pqr@gmail.com       nonmatch
yup@gmail.com       nonmatch

【问题讨论】:

  • 在一遍又一遍地问同一个问题之前,也许您可​​能想先尝试一下这个问题以前版本中的一些答案
  • 是的,因为现在偏好已经改变,以前只比较和更新所有表格,但现在要比较的表格有很多关于数百万的数据,因为它们需要单独进行。 .请帮帮我
  • 您仍然应该为有用的答案投票,并将您发布的任何问题的最有用的答案标记为正确

标签: python mysql pandas


【解决方案1】:
data3 = data2.to_sql('main', con=engine, if_exists='replace',index=False)
cursor.execute("alter table main add status varchar(128)")
for i in ['tab1','tab2']:
    cursor.execute("update main left join {} on main.email={}.email set status=if({}.email is not null,'match','nonmatch')".format(i,i,i))
    conn.commit()
    data_2=cursor.fetchall()
    data3=data_2
    print data_2

查询很好,但我希望 for 循环运行是一个错误,因为我得到了最后一个 tab2 比较结果,而不是 tab1 和 tab2 两个比较结果。

来自 Scott Boston 的更新:

你仍然可以运行:

update main left join (select * from tab1 union all select * from tab2) total on main.email=total.email
set status=if(total.email is not null,'match','nonmatch');

【讨论】:

    【解决方案2】:

    终于明白了:

    data3 = data2.to_sql('main', con=engine, if_exists='replace',index=False)
        cursor.execute("alter table main add status varchar(128) **not null default 'nonmatch**'")
        d=cursor.fetchall()
        print d
    
        for i in ['tab1','tab3','tab2']:
            cursor.execute("update main **join** {} on main.email={}.email set status=if({}.email is not null,'match','nonmatch')".format(i,i,i))
            conn.commit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-11
      • 2015-07-27
      • 2018-05-30
      • 2016-11-27
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      相关资源
      最近更新 更多