Comúnmente las exporto a CSV, delimitado por coma con doble comilla como separador.
Creo mi modelo en forma declarativa.
class CoberturaCame(DeclarativeBase): """ Beneficios Adicionales """ __tablename__ = "came" #{ Columns id = Column(Integer, autoincrement=True, primary_key=True) tipo = Column(Integer) vendedor = Column(Unicode(32)) edad_inf = Column(u'edad_inf', Integer, nullable=True) edad_sup = Column(u'edad_sup', Integer, nullable=True) hombre = Column(Float(precision=2), default=0.0) mujer = Column(Float(precision=2), default=0.0) #} #{ Helpers def from_csv_row(self, row): self.tipo = row[1] self.vendedor = row[2] self.edad_inf = row[3] self.edad_sup = row[4] self.hombre = row[5] self.mujer = row[5] @classmethod def by_edad_tipo(cls, edad, tipo): """Return the BenAdicionales object whose edad is between``edad``.""" return DBSession.query(cls).filter( and_(cls.edad_inf <= edad, cls.edad_sup >= edad, cls.tipo==tipo)).first() #}
y agrego una simple rutina de importación.
from miproyecto import model import cvs csvreader = csv.reader(open('res/janem_cobertura_came.csv')) # skip first row csvreader.next() for row in csvreader: if len(row) == 0: continue d = model.CoberturaCame() d.from_csv_row(row) model.DBSession.add(d) model.DBSession.flush()
La función miembro from_csv_row(row) definida en el modelo, es una ayuda visual y no tiene otro propósito mas que copiar los valores de la fila a un objeto nuevo. En algunos casos pudiera servir para realizar alguna transformación como fechas, minúsculas y mayúsculas o alguna operación aritmética antes de entrar. Aunque yo aconsejo realizar todas esas transformaciones desde la tabla de Excel y exportar el CSV ya listo para importar.
Cabe mencionar que las cantidades numéricas deben de estar sin formato, por que los caractéres '$' o las ',' dentro de las cifras confunden el lector de python.
No hay comentarios.:
Publicar un comentario