Forum >> Programmazione Python >> Database >> Inserimento numeri Reali nel database

Pagina: 1

Buongiorno,



sono Vincenzo e da pochissimo ho iniziato a studiare Python ed SQLite per lavoro.




Sono riuscito con non poche difficoltà a trasferire i dati da un file .txt all'interno di una tabella in un database SQLite ma i numeri con la virgola vengono convertiti in stringhe nonostante abbia provato sia con FLOAT che con REAL.




Posto il codice, mi scuso anticipatamente ma non trovo i tag per postare codice:


testo = open("Report1 - ARTICOLI.txt")

contenuto=testo.read()

numeroRighe=contenuto.count("\n")

testo.seek(0)



import sqlite3

conn = sqlite3.connect('database.sqlite')

cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS Prodotti')

cur.execute('CREATE TABLE Prodotti (Codice INTEGER, Iva INTEGER, UM TEXT, Imb INTEGER, Str INTEGER, Pal INTEGER, Pubblico REAL, Codice a Barre INTEGER, Descrizione TEXT, Mag INTEGER, Cllist TEXT, Cessione REAL, UMO TEXT, TMC INTEGER, Peso Medio REAL)')

conn.close()

conn = sqlite3.connect('database.sqlite')

cur = conn.cursor()

for i in range(10):

contenuto = testo.readline()

lista=contenuto.split(";")

cur.execute('INSERT INTO Prodotti (Codice, Iva, UM, Imb, Str, Pal, Pubblico, Codice a Barre, Descrizione, Mag, Cllist, Cessione, UMO, TMC, Peso Medio) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )', (lista0, lista2, lista3, lista4, lista5, lista6, lista7, lista8, lista9, lista10, lista12, lista13, lista14, lista15, lista18))

conn.commit()





Il risultato, se provo a stampare il valore della lista in posizione 6 è il seguente:




' 9.49'




Any ideas?
Allegati
il problema è che che tu leggi i numeri da un file di testo, e quindi li prelevi sotto forma di stringhe. Devi convertirli, prima di inserirli nel database. Il database non li converte per te... perché dovrebbe?

(Poi qui c'è una ulteriore sottigliezza... un database "tipico", se tu dichiari REAL o INT una colonna e poi cerchi di metterci dentro una stringa, si pianta e ti dà errore. Invece sqlite non è fortemente tipato... ovvero, le indicazioni dei tipi sono solo "suggerimenti" ma tu in pratica puoi metterci dentro quello che vuoi. Sqlite sostiene che non è un baco, ma una feature. Comuque, così è).

Ciao,
grazie per la risposta.

Comunque ho capito che il problema era la virgola, per cui utilizzo il metodo replace per sostituirle con il punto, adesso funziona.

Saluti
oh, giusto... anche quello è da contare... comunque non dimenticarti di convertire, altrimenti inserisci nel database sempre e comunque una stringa.
Si converto la stringa con il metodo split(";"), in questo modo ottengo una lista che in seguito il cursore utilizza per popolare la tabella.


Pagina: 1



Esegui il login per scrivere una risposta.