sql >> Database teknologi >  >> RDS >> Mysql

Hvordan indsætter man en CSV-fildata i MYSQL ved hjælp af Python effektivt?

Der er mange måder at optimere denne indsats på. Her er nogle ideer:

  1. Du har en for-løkke over hele datasættet. Du kan lave en commit() hver 100 eller deromkring
  2. Du kan indsætte mange rækker i én indsats
  3. du kan kombinere de to og lave en indsættelse af flere rækker for hver 100. række på din CSV
  4. Hvis python ikke er et krav, kan du gøre det direkte ved hjælp af MySQL, som det er forklaret her . (Hvis du skal gøre det ved hjælp af python, kan du stadig forberede den erklæring i python og undgå at gå igennem filen manuelt).

Eksempler:

for nummer 2 på listen vil koden have følgende 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. Er der et alternativ til TOP i MySQL?

  2. SQL vælg n'te medlem af gruppen

  3. Metoden blev ikke fundet i klassen

  4. Amazon DynamoDB - Design af borde baseret på venskaber