2012-04-14 45 views
28

No estoy seguro de lo que me falta aquí, pero este código se ejecuta sin ningún mensaje de error, pero no hay nada en la tabla. Estoy cargando un CSV valores en tres columnas en la tabla mysqlCargar datos CSV en MySQL en Python

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" 

Agradecería que alguien más pudiera echarle un vistazo.

Gracias.

Respuesta

59

Creo que tiene que hacer mydb.commit() todo el inserto en.

Algo como esto

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" 
+0

Gracias que funciona :) Pero ¿sabes por qué los valores están todos entre comillas simples en la base de datos? –

+4

Intenta '" insertar en testcsv (nombres, clases, marca) valores (% s,% s,% s) ", fila' –

+0

@HelenNeely también recuerda aceptar la respuesta y la respuesta ascendente. –

0

Si se trata de una trama de datos pandas que podría hacer:

envío de los datos

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

para evitar el uso de la for.

+2

Parece que has citado un manual? Agregue una referencia en tales casos, por favor, para que las personas puedan seguir leyendo en caso de que estén interesados ​​(y para dar una referencia adecuada a los autores originales). –

0
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() 
Cuestiones relacionadas