sql >> Database >  >> RDS >> Mysql

Hoe een CSV-bestandsgegevens efficiënt in MYSQL in te voegen met Python?

Er zijn veel manieren om deze insert te optimaliseren. Hier zijn enkele ideeën:

  1. Je hebt een for-lus over de hele dataset. U kunt een commit() . doen elke 100 of zo
  2. Je kunt veel rijen invoegen in één insert
  3. je kunt de twee combineren en elke 100 rijen een invoeging met meerdere rijen maken op je CSV
  4. Als python geen vereiste is, kunt u dit rechtstreeks doen met MySQL, zoals wordt uitgelegd hier . (Als je het met python moet doen, kun je die instructie nog steeds in python voorbereiden en voorkomen dat je handmatig door het bestand loopt).

Voorbeelden:

voor nummer 2 in de lijst heeft de code de volgende structuur:

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. Waarschuwing:mysql_connect():Toegang geweigerd voor gebruiker 'root'@'localhost' (met wachtwoord:JA)

  2. mysql:gebruik SET of veel kolommen?

  3. Hulp nodig bij het maken van een eenvoudig grootboek van mysql-schuld- en krediettabellen?

  4. Resultatenset retourneren op basis van andere rijen