[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