Forum >> Programmazione Python >> Scripting >> Errore nel controllo:

Pagina: 1

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 !! :fingers-crossed:

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 !




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 ---
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.




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
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 :fingers-crossed:
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 :fingers-crossed:
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 query
Uhhhh, 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
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 :fingers-crossed: :fingers-crossed:
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 :fingers-crossed: :fingers-crossed:
Sono proprio contento, bravo. :ok:

Cya


Pagina: 1



Esegui il login per scrivere una risposta.