Esta es una tarea bastante rutinaria, que de seguro la has hecho en algún otro lenguaje/plataforma. Razón por la cual es un buen ejemplo para la #SemanaPythonRD que estamos llevando a cabo.

Vamos a comenzar con un archivo CSV bastante sencillo, que contiene 3 campos: Id, User & Email. La idea seria recorrer este archivo, fila por fila y cargarlo a una base de datos de SQLite3.

1,hminaya,hminaya@email.com
2,jcruz,jcruz@email.com
3,mperez,mperez@email.com
4,afabro,afabro@email.com
5,cguzman,cguzman@email.com

Leer el CSV

Haremos esto en dos pasos, primero vamos a leer el archivo y recorrer todas las filas/columnas y luego nos preocuparemos por la base de datos. Para leer el archivo lo haremos con este programa

# Carga los usuarios que estan en el archivo users.csv

import csv

FileName = "users.csv"
File = open(FileName, "rb")
reader = csv.reader(File)

print "###############################################"
print "#### Recorriendo el archivo %s" % FileName
print "###############################################"

# Arreglo para almacenar la info
detalle = []

# Guardar cada fila en un elemento
for row in reader:
	detalle.append(row)

# Imprimir el contenido en pantalla
for row in detalle:
	print row

File.close()

El resultado al ejecutar es el siguiente:

Insertar en la Base de Datos

Para insertar en la Base de Datos es bastante simple, solo basta con:

  • Importar el modulo correspondiente
  • Abrir la conexión
  • Abrir un cursor
  • Hacer el insert
  • Hacer commit

Y aqui tenemos el código completo:

# Carga los usuarios que estan en el archivo users.csv

import csv
import sqlite3

FileName = "users.csv"
File = open(FileName, "rb")
reader = csv.reader(File)

conn = sqlite3.connect('users.db')
c = conn.cursor()

print "###############################################"
print "#### Recorriendo el archivo %s" % FileName
print "###############################################"

# Arreglo para almacenar la info
detalle = []

# Guardar cada fila en un elemento
for row in reader:
	detalle.append(row)

# Imprimir el contenido en pantalla :D 
for row in detalle:
	c.execute("Insert into users values(%s,'%s','%s')" % (row[0], row[1], row[2]))
	print "ID: %s | UserName: %s | Email: %s" % (row[0], row[1], row[2])

# No olviden hacer commit
conn.commit()

File.close()
c.close()

El resultado es:

Obviamente aqui faltan muchas validaciones respecto a tipo de datos y de data invalida, pero es solo un ejemplo para que vean lo corto que es hacer en python un script de esta naturaleza.