首页 > 解决方案 > 如何避免 for 循环并在此代码中使用替代方法(python 和 postgres sql)?下面是我的代码

问题描述

##这是我的代码。我想在这里摆脱 for 循环。您能否建议一种可用于相同逻辑的python中的替代方法##

usa_records = cursor.fetchall()
    for k in csv_files:#reading csv files
      with open(k, 'r') as f:
          reader = csv.reader(f)
          next(reader)  # Skip the header row.
          for row in reader:
              status = 0
              for m in usa_records:
                  if (m[6] == row[6]):
                      status = status + 1

                      row[0] = m[0] if m[0] is not None else row[0]
                      row[1] = m[1] if m[1] is not None else row[1]
                      row[2] = m[2] if m[2] is not None else row[2]
                      row[3] = m[3] if m[3] is not None else

                      row[17] = m[17] if m[17] is not None else row[17]

                      sql_update_query = """Update usa set technology=%s,   company_name=%s,contact_name=%s,first_name=%s,last_name=%s,title=%s,email=%s,person_linkedin_url=%s,web_address=%s,company_linkedin_url=%s,company_address=%s,city=%s,state=%s,company_phone=%s,employees=%s,industry=%s,country=%s where id = %s"""
                      cursor.execute(sql_update_query,
                                     (row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8],
                                      row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16],
                                      row[17]))
                      conn.commit()

                      row_count = cursor.rowcount
                      print(row_count, "Records Updated")
                      break
                  else:
                      pass
              if status == 0:
                  cursor.execute(
                      "INSERT INTO usa VALUES (%s, %s, %s, %s,%s, %s, %s, %s,%s, %s, %s, %s,%s, %s, %s, %s,%s,%s)",
                      row)

                  conn.commit()
                  print("created new data")

标签: pythonpostgresqlfor-loop

解决方案


看看熊猫。看起来你正在做的大部分事情都可以通过一些简单的数据框操作来完成。例如读取一个csv: https ://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

而不是循环遍历行,您可以使用.applyhttps ://pandas.pydata.org/docs/reference/api/pandas.DataFrame.apply.html


推荐阅读