dopo il talk di Alex su codice pythonico/idiomatico... beh, non posso lasciar passare il seguente caso senza chiedervi un opinione
dunque il caso è questo ho un file Excel xlsx con righe da caricare una a una su DB non consigliatemi di utilizzare un ETL, perchè non è questo il punto ah, a proposito, ho scoperto che per mangeggiare i file xlsx, openpyxl va alla grande tornando a noi... la prima riga dell'xlsx è un intestazione che stabilisce i nomi dele colonne avevo chiesto che usassero i nomi uno a uno con i nomi dei campi su db. ma, no, sarebbe stato troppo semplice e logico, per cui i nomi sono a dir poco fantasiosi e volatili Indi per cui ho un dict che rimappa nomi-colonne-xlsx con nomi-campi-db XLSX_COLUMN_NAMES = { 'IL nome' : 'name', 'RIFERIMENTO a GIGIO': 'gigio_id', } il piano per il caricamento dati è il seguente: iterare sulle righe dell'xlsx, costruire un kwargs, fare l'insert abbastanza KISS, insomma ok, show me the code! import openpyxl as pyx from .models import MyModel CN = XLSX_COLUMN_NAMES wb = pyx.load_workbook("sample.xlsx")) ws = wb['DB'] columns = {c.column: CN.get(c.value) for c in ws.rows[0]} MyModel.objects.all().delete() for row in ws.rows[1:]: kwargs = {columns[c.column]: c.value for c in row} kwargs.pop(None) MyModel(**kwargs).save() le istruzioni per il db sono per django, e per di più sono un po' niubbe (nel senso che si poteva fare qualcosa di più bulk) ma non è la parte importante: non fanno altro che cancellare tutti i record e poi inserirli uno per uno E' quel kwargs.pop(None) che non mi piace Ci ho girato un po' intorno, ma non mi viene in mente come rimuoverlo a meno di introdurre degli "if" che mi piacciono ancora meno voi che ne dite? Marco P.S. se non conoscete openpyxl vi dico che l'attributo "value" è il contenuto della cella, mentre l'attributo "column" è la sua coordinata x in notazione-excel, ossia "A", "B", etc. Per esempio, la cella "D13" ha cell.column == "D" P.P.S. boh, mi sa che vi ho dato un po' troppo contesto rispetto al problema vero e proprio. Ma diciamo che è stata anche l'occasione per citare qualche tecnologia che mi ha fatto comodo: openpyxl e ... Django!
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python