[Gfoss] Spatialite creare tabella con join ed escludere colonne nulle

Antonio Falciano afalciano a yahoo.it
Dom 30 Mar 2014 16:47:01 CEST


Il 29/03/2014 21:26, Luca Mandolesi ha scritto:
> Fossi in te farei creare a python la query in base alle tue necessità,
> così avresti la tabella solo con i campi "riempiti".

Sono d'accordo. Viste le note limitazioni di SQLite (dal creare una
vista sul pragma table_info(...) al droppare una colonna), conviene
affrontare il problema programmaticamente. Ad esempio, considerando solo
i campi con almeno il 25% di valori non NULL (a meno di sviste domenicali):

import sqlite3
conn = sqlite3.connect('test.sqlite')
c = conn.cursor()

# creo un vettore dei nomi delle colonne
c.execute("PRAGMA table_info(foo);")
fieldNames=[]
for row in c.fetchall():
     fieldNames.append(row[1])
fieldNames.remove('PK_UID')
#fieldNames.remove('Geometry')

# conto tutti i record e i record non NULL per ogni colonna
query = "SELECT count(*)"
for fieldName in fieldNames:
     query += ", count(" + fieldName + ")"
query += " FROM foo;"
c.execute(query)
counts = c.fetchall()[0]

# soglia di valori non NULL
soglia = 0.25
query = "SELECT PK_UID"
for i in range(len(fieldNames)):
     if counts[i+1] > soglia * counts[0]:
         query += ", " + fieldNames[i]
query += " FROM foo;"
c.execute(query)
print c.fetchall()

# ecc. ecc.

ciao
Antonio

-- 
Antonio Falciano
http://www.linkedin.com/in/antoniofalciano


Maggiori informazioni sulla lista Gfoss