sql >> Databasteknik >  >> RDS >> Mysql

Hur infogar man en CSV-fildata i MYSQL med Python effektivt?

Det finns många sätt att optimera denna insats. Här är några idéer:

  1. Du har en for-loop över hela datamängden. Du kan göra en commit() var 100 eller så
  2. Du kan infoga många rader i en infogning
  3. du kan kombinera de två och göra en infogning av flera rader var 100:e rad i din CSV
  4. Om python inte är ett krav kan du göra det direkt med MySQL som det förklaras här a> . (Om du måste göra det med python kan du fortfarande förbereda den satsen i python och undvika att gå igenom filen manuellt).

Exempel:

för nummer 2 i listan kommer koden att ha följande struktur:

def csv_to_DB(xing_csv_input, db_opts):
    print("Inserting csv file {} to database {}".format(xing_csv_input, db_opts['host']))
    conn = pymysql.connect(**db_opts)
    cur = conn.cursor()
    try:
        with open(xing_csv_input, newline='') as csvfile:
            csv_data = csv.reader(csvfile, delimiter=',', quotechar='"')
            to_insert = []
            insert_str = "INSERT INTO table_x (ID, desc, desc_version, val, class) VALUES "
            template = '(%s, %s, %s, %s, %s)'
            count = 0
            for row in csv_data:
                count += 1
                to_insert.append(tuple(row))
                if count % 100 == 0:
                    query = insert_str + '\n'.join([template % r for r in to_insert])
                    cur.execute(query)
                    to_insert = []
                    conn.commit()
            query = insert_str + '\n'.join(template % to_insert)
            cur.execute(query)
            conn.commit()
    finally:
        conn.close()


  1. Skapa och konfigurera Oracle Linked Server i SQL Server

  2. mysql sammanfoga frågeordning med två kolumner

  3. Sphinx 2.0.4 Installationsfel med MAMP 2.0:Kan inte hitta MySQL Headers

  4. [Video] Dataintegration med PostgreSQL