Mitch Fournier explica en su blog cómo importar datos en formato CSV a un modelo de Django, tal cómo lo ha utilizado en su proyecto Wantbox.com.
Primero creamos un modelo que contenga los mismos campos que el archivo CSV que queramos importar, utilizando el tipo de campo más adecuado para cada uno de ellos dependiendo de si sus valores van a ser cadenas de texto, números, fechas... Aquí tenemos un ejemplo de archivo CSV:
ZIPCODE, CITY, STATECODE, STATENAME
02111, BOSTON, MA, MASSACHUSETTS
02481, WELLESLEY HILLS, MA, MASSACHUSETTS
05819, ST. JOHNSBURY, VT, VERMONT
...
Creamos el modelo que nos sirva para almacenar los datos:
import datetime
class ZipCode(models.Model):
zipcode = models.CharField(max_length=5)
city = models.CharField(max_length=64)
statecode = models.CharField(max_length=2)
statename = models.CharField(max_length=32)
create_date = models.DateTimeField(default=datetime.datetime.now)
def __unicode__(self):
return "%s, %s (%s)" % (self.city, self.statecode, self.zipcode)
class Meta:
ordering = ['zipcode']
Después creamos un script que utilizaremos para importar los datos, podemos llamarlo load_data.py. El script incluirá la ruta de nuestro archivo CSV y de nuestro proyecto para utilizar sus settings. En el script leeremos las líneas del archivo CSV y crearemos una instancia de nuestro modelo por cada línea para después guardarla en la base de datos.
# ruta a nuestro archivo CSV
csv_filepathname="/home/usuario/zipcodes.csv"
# ruta a nuestro proyecto de django
your_djangoproject_home="/home/usuario/projects/mi_proyecto/"
import sys,os
sys.path.append(your_djangoproject_home)
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
# importamos nuestro modelo
from zips.models import ZipCode
import csv
dataReader = csv.reader(open(csv_filepathname), delimiter=',', quotechar='"')
for row in dataReader:
if row[0] != 'ZIPCODE': # ignoramos la primera línea del archivo CSV
zipcode = ZipCode()
zipcode.zipcode = row[0]
zipcode.city = row[1]
zipcode.statecode = row[2]
zipcode.statename = row[3]
zipcode.save()
Este script también nos sirve para importar datos de archivos TSV de Excel cambiando la línea de dataReader por:
dataReader = csv.reader(open(csv_filepathname), dialect='excel-tab')
De esta forma podemos importar nuestros datos en formato CSV o TSV a nuestros proyecto django. También podemos crear un management command específico para ello en lugar utilizar un script independiente.
Publicado por Antonio Melé el Miércoles 12 de Octubre de 2011
Compártelo:
| Categorías:
modelos,
trucos,
tutorial
A veces queremos utilizar la función de aggregación annotate() y aplicar filtros al modelo que se encuentra dentro de la misma, pero no es ...
Algo interesante que nos aporta django-command-extensions es poder crear una representación gráfica de nuestros modelos (o por decirlo de otro modo nuestro esquema de ...
En múltiples ocasiones nos gustaría extender el modelo User para que incluyera otros campos y funciones. La manera "oficial" de hacer esto (la mostrada ...
Cuando usamos un campo con diferentes opciones (choices) en nuestro modelo utilizamos una lista de elementos cada uno con el valor real que se ...
No hay ningún comentario todavía.
Suscríbete a nuestro feed RSS y al feed de la comunidad para estar al tanto de todo lo que ocurre entorno a Django.
Tú también puedes escribir en éste blog. Para hacerlo basta con que nos digas sobre qué quieres escribir un artículo relacionado con Django.
Utilizar un formulario para modificar 2 modelos
Descubriendo objetos similares por sus etiquetas