web-dev-qa-db-fra.com

Charger des données CSV dans MySQL en Python

Pas sûr de ce que je manque ici mais ce code fonctionne sans aucun message d'erreur, mais il n'y a rien dans la table. Je charge une valeur CSV dans trois colonnes dans la table mysql

import csv
import MySQLdb

mydb = MySQLdb.connect(Host='localhost',
    user='root',
    passwd='',
    db='mydb')
cursor = mydb.cursor()

csv_data = csv.reader(file('students.csv'))
for row in csv_data:

    cursor.execute('INSERT INTO testcsv(names, \
          classes, mark )' \
          'VALUES("%s", "%s", "%s")', 
          row)
#close the connection to the database.
cursor.close()
print "Done"

J'apprécierais que quelqu'un d'autre puisse jeter un coup d'œil.

Je vous remercie. 

33
Helen Neely

Je pense que vous devez faire mydb.commit() tout l'insertion dans.

Quelque chose comme ça

import csv
import MySQLdb

mydb = MySQLdb.connect(Host='localhost',
    user='root',
    passwd='',
    db='mydb')
cursor = mydb.cursor()

csv_data = csv.reader(file('students.csv'))
for row in csv_data:

    cursor.execute('INSERT INTO testcsv(names, \
          classes, mark )' \
          'VALUES("%s", "%s", "%s")', 
          row)
#close the connection to the database.
mydb.commit()
cursor.close()
print "Done"
64
Jakob Bowyer

Si c'est un bloc de données de pandas, vous pouvez faire:

Envoi des données

csv_data.to_sql=(con=mydb, name='<the name of your table>',
  if_exists='replace', flavor='mysql')

pour éviter l'utilisation de la variable for.

1
Rafael Valero

La réponse ci-dessus semble bonne. Mais une autre façon de faire consiste à ajouter l'option de validation automatique avec la connexion à la base de données. Cela valide automatiquement toutes les autres opérations effectuées dans la base de données, évitant ainsi l’utilisation de la mention sql.commit() à chaque fois. 

 mydb = MySQLdb.connect(Host='localhost',
        user='root',
        passwd='',
        db='mydb',autocommit=true)
1
Mahesh Kumaran
  from __future__ import print_function
import csv
import MySQLdb

print("Enter  File  To Be Export")
conn = MySQLdb.connect(Host="localhost", port=3306, user="root", passwd="", db="database")
cursor = conn.cursor()
#sql = 'CREATE DATABASE test1'
sql ='''DROP TABLE IF EXISTS `test1`; CREATE TABLE test1 (policyID int, statecode varchar(255), county varchar(255))'''
cursor.execute(sql)

with open('C:/Users/Desktop/Code/python/sample.csv') as csvfile:
    reader = csv.DictReader(csvfile, delimiter = ',')
    for row in reader:
        print(row['policyID'], row['statecode'], row['county'])
        # insert
        conn = MySQLdb.connect(Host="localhost", port=3306, user="root", passwd="", db="database")
        sql_statement = "INSERT INTO test1(policyID ,statecode,county) VALUES (%s,%s,%s)"
        cur = conn.cursor()
        cur.executemany(sql_statement,[(row['policyID'], row['statecode'], row['county'])])
        conn.escape_string(sql_statement)
        conn.commit()
0
KeepLearning