Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie füge ich eine CSV-Datei mit Python effizient in MYSQL ein?

Es gibt viele Möglichkeiten, diesen Einsatz zu optimieren. Hier sind einige Ideen:

  1. Sie haben eine for-Schleife über den gesamten Datensatz. Sie können ein commit() ausführen alle 100 oder so
  2. Sie können viele Zeilen in eine Einfügung einfügen
  3. Sie können die beiden kombinieren und alle 100 Zeilen in Ihrer CSV-Datei eine mehrzeilige Einfügung vornehmen
  4. Wenn Python nicht erforderlich ist, können Sie es direkt mit MySQL tun, wie es hier . (Wenn Sie dies mit Python tun müssen, können Sie diese Anweisung immer noch in Python vorbereiten und vermeiden, die Datei manuell zu durchlaufen).

Beispiele:

für Nummer 2 in der Liste hat der Code die folgende 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()