Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak efektywnie wstawić dane z pliku CSV do MYSQL przy użyciu Pythona?

Istnieje wiele sposobów na optymalizację tej wkładki. Oto kilka pomysłów:

  1. Masz pętlę for na całym zbiorze danych. Możesz wykonać commit() co około 100
  2. Możesz wstawić wiele wierszy do jednej wkładki
  3. możesz połączyć te dwa i zrobić wielowierszową wstawkę co 100 wierszy w pliku CSV
  4. Jeśli Python nie jest wymagany, możesz to zrobić bezpośrednio za pomocą MySQL, jak wyjaśniono tutaj . (Jeśli musisz to zrobić za pomocą Pythona, nadal możesz przygotować tę instrukcję w Pythonie i uniknąć ręcznego przechodzenia przez plik).

Przykłady:

dla numeru 2 na liście kod będzie miał następującą 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyzwalacze do łączenia wielu stołów

  2. Konwertuj binarny na dziesiętny za pomocą MySQL

  3. Połącz punkty długie/wysokie w obrębie ramki ograniczającej w zależności od promienia w MySQL

  4. Klucz obcy MySQL, aby umożliwić NULL?

  5. Grupuj według klauzuli w mySQL i postgreSQL, skąd błąd w postgreSQL?