Forum
>>
Programmazione Python
>>
Scripting
>>
Errore nel controllo:
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da mattia maggi |
2017-12-22 09:58:18 - Errore nel controllo:
|
Ciao ragazzi, non riesco a correggere questo errore nel controllo dell'inserimento della data. Se inserisco una data precedente a quella attuale mi fa ripetere l'operazione (e fin qui va bene, cioè è quello che voglio fargli fare) però quando mi stampa il db inserisce lo stesso la data sbagliata. Vi metto lo script qui sotto che forse è più chiaro.
In ogni caso grazie mille per l'aiuto !! from datetime import datetime def gestisci_inserimento(): today = datetime.today().date() #inserisci data: D = raw_input('Inserisci la data di scadenza:') insert_data = datetime.strptime(D, '%Y/%m/%d').date() #ciclo controllo: if insert_data < today: print('DATA NON VALIDA!') return False, D elif insert_data == today: print('Attento! Il prodotto scade oggi.') return True, D else: return True, D correct_insert, D = gestisci_inserimento() while not correct_insert: correct_insert = gestisci_inserimento()Non ho messo tutta la parte di connessione al db e stampa perchè funziona e non mi da problemi. Ogni consiglio è ben accetto, grazie ancora ! |
|
Scritto da Daniele aka Palmux |
2017-12-22 11:58:55 - Re: Errore nel controllo:
|
Ciao caro, ma dove hai messo la parte dell'inserimento nel DB, con quali controlli?
Ah, hai fatto bene a non usare input ed invece usare raw_input() , magari puoi mettere qualche controllo sull'immissione della data. Cya --- Ultima modifica di Daniele aka Palmux in data 2017-12-22 12:00:44 --- |
|
Scritto da mattia maggi |
2017-12-22 14:56:09 - Re: Errore nel controllo:
|
Per comodità e anche poca praticità mia ho messo tutto nello stesso script, adesso ti posto per intero.
import MySQLdb import time from datetime import datetime,date def gestisci_inserimento(): today = datetime.today().date() #inserisci data: D = raw_input('Inserisci la data di scadenza:') insert_data = datetime.strptime(D, '%Y/%m/%d').date() #ciclo controllo: if insert_data < today: print('DATA NON VALIDA!') return False, D elif insert_data == today: print('Attento! Il prodotto scade oggi.') return True, D else: return True, D # SCRIPT PRINCIPALE: #Connessione al db: db = MySQLdb.connect(host = 'localhost', user = '*****', passwd = '*****', db = '******') cursore = db.cursor() #Inserisco il prodotto: P = raw_input('Inserisci il Prodotto:') Q = raw_input('Inserisci la Quantita:') correct_insert, D = gestisci_inserimento() while not correct_insert: correct_insert = gestisci_inserimento() cursore.execute("INSERT INTO Tabella (Prodotto,Quant,DataScadenza) VALUES (%s,%s,%s)" ", (P,Q,D)) #Verifico l'inserimento tramite la visualizzazione della tabella: query = ("SELECT * FROM Tabella ORDER BY DataScadenza ASC limit 100;") cursore.execute(query) db.commit(); for (id, Quantita, Prodotto, DataScadenza) in cursore: print("{} | {} | {} | {} | {}".format(id, Quantita,Prodotto,DataScadenza)) cursore.close(); db.close();Dovrebbe esserci tutto, però non capisco dove sbaglio. Grazie ancora M.M. |
|
Scritto da Daniele aka Palmux |
2017-12-22 15:32:49 - Re: Errore nel controllo:
|
Ci sono alcuni errori che devi correggere, soprattutto due:
1. Se inserisci una data errata il tuo while termina, attribuisci un tupla e non solo un True, quindi la condizione non è più valida; 2. Come diretta conseguenza, la tua indentazione vacilla. In tutti i casi uscendo dal while scriverà nel DB perché non ci sono ulteriori controlli. Un uso più attento delle condizioni, magari inserendo anche un try, risolve il tuo problema. Ci sei quasi comunque, controlla il valore che assume correct_insert durate l'esecuzione del tuo script, ed hai risolto. Torna vincitore. Cya |
|
Scritto da mattia maggi |
2017-12-23 14:43:52 - Re: Errore nel controllo:
|
Ciao, ho provato a venirne a capo ma non ho ottenuto grossi risultati . Potresti farmi un esempio di quello che mi hai detto così magari mi chiarisco le idee ? Grazie ancora
|
|
Scritto da Daniele aka Palmux |
2017-12-23 17:02:25 - Re: Errore nel controllo:
|
Non capirmi male, non è che non te lo voglio dire, ma è mio costume cercare di dare indizi per arrivare alla soluzione in autonomia, così impari sicuramente meglio. Tu poi dimostri di essere ad un livello non da neofita assoluto, anzi, quindi riesci sicuramente a cavarci gli zampetti.
Dopo sto cappellotto, andiamo un po' nel dettaglio. Siamo arrivati qui: while not correct_insert: correct_insert = gestisci_inserimento()Come ti avevo suggerito, cosa cosa succede se inserisci una data non valida? Inserisci il Prodotto:Python Inserisci la Quantita:1 Inserisci la data di scadenza:2017/12/12 DATA NON VALIDA! Inserisci la data di scadenza:2017/12/12 DATA NON VALIDA! #ma ora sia avvia la queryUhhhh, ma come mai si è avviata la query? Vediamo un po' che valore ha correct_insert. Al primo "giro" correttamente è False, ma dopo l'errore ha il valore di una tupla (False, '2017/12/12') quindi la tua condizione non è più soddisfatta. Dai ora hai tutto per portare a casa lo script, credo in te. Cya |
|
Scritto da mattia maggi |
2017-12-23 17:28:37 - Re: Errore nel controllo:
|
Ok, ho risolto inserendo dopo correct_insert la variabile D che inserisco da tastiera. Avevo notato anche io che dopo il secondo inserimento errato andava diretto alla query ma non riuscivo a capire come sistemarlo !! Grazie ancora per i consigli
|
|
Scritto da Daniele aka Palmux |
2017-12-23 17:38:22 - Re: Errore nel controllo:
|
Sono proprio contento, bravo.
Cya |
Pagina: 1
Esegui il login per scrivere una risposta.