Forum
>>
Programmazione Python
>>
Database
>>
Problema con la ricerca in database da variabile
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da trescon |
2020-11-29 16:09:28 - Problema con la ricerca in database da variabile
|
Buongiorno, il problema che sto trovando in questo momento è il seguente (sono su Windows, Python 3.8, Sqlite3) :
c.execute('SELECT * FROM Marche where Marca = "Ferrari"') cosi facendo la ricerca nel db funziona regolarmente; il problrma arriva se io sostituito il dato di ricerca "Ferrari" con un variabile (x es.) G alla quale ho precedentemente associato il cantenuto "Ferrari". Il messaggio che mi da è: sqlite3.OperationalError: no such column: G In effetti G non è la colonna ma il dato che deve cercare nella colonna Marca. Dove sbaglio ? Non riesco a capire. Grazie ------
Alberto |
|
Scritto da RicPol |
2020-11-30 11:17:14 - Re: Problema con la ricerca in database da variabile
|
Puoi indicarmi quale parte della documentazione di sqlite non ti è chiara? https://docs.python.org/3/library/sqlite3.html
https://pythoninwindows.blogspot.com/p/i-miei-libri.html : i miei libri
https://pythoninwindows.blogspot.com : il mio blog |
|
Scritto da trescon |
2021-01-24 17:27:52 - Re: Problema con la ricerca in database da variabile
|
Buongiorno, non è una parte della documentazione che non mi è chiara, è che non mi funziona ..
# Do this instead t = ('RHAT',) c.execute('SELECT * FROM stocks WHERE symbol=?', t) print(c.fetchone()) Questo è l'esempio che mi da la documentazione ufficiale (quella che mi ha linkato tu), questo è quello che ho ho fatto io : conn = sqlite3.connect('Assistenze_1.db') c = conn.cursor() # c.execute("SELECT * FROM Marche WHERE Marca = 'Oppo'") marcadacercare = ("Motorola",) ric=c.execute("SELECT * FROM Marche WHERE Marca = ?",marcadacercare) # c.execute(ric , (marcadacercare,)) print (c.fetchone()) # for row in c.fetchone(): a1 ,a2 , a3 , a4 , a5 , a6 , a7 , a8 ,a9 , a10 , a11 , a12 , a13 , a14 ,a15 , a16, a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27, a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 = c.fetchone() # print (row) # print(row2) # print(marca) print(a1) print(a2) print(a3) print(a4) print(a5) Button_1.configure (text = a1) LABEL_LOGIN.insert(0, a4) LABEL_PWD.insert(0, a5) CODICE CLIENTE 1.configure(text = a2) ID PARTNER 1.configure(text = a3) LABEL_CALL_CENTER.configure(text = a 8) LABEL_CALL_CENTER_FUORI.configure(text = a9) LABEL_CALL_CENTER_MAIL.configure(text = a10) LABEL_CALL_CENTER_NOI_TEL_DATI.configure(text = a11) LABEL_CALL_CENTER_PIN_DATI.configure(text = a12) LABEL_CALL_CENTER_NOI_MAIL.insert(0, a13) LABORATORIO_DATI.configure(text = a14) CORRIERE_DATI.configure(text = a15) LABORATORIO_TEL_DATI.configure(text = a16) LABORATORIO_MAIL_DATI.configure(text = a17) # PROCEDURE BUTTON 1.configure(text = a1 8) PROCEDURE_BUTTON_1_ALLEGATO = a19 PROCEDURE BUTTON 2.configure(text = a20) PROCEDURE_BUTTON_2_ALLEGATO = a21 # NOTE BUTTON 1.configure(text = a22) NOTE_BUTTON_1_ALLEGATO = a23 NOTE BUTTON 2.configure(text = a24) NOTE_BUTTON_2_ALLEGATO = a25 # MODULI BUTTON 1.configure(text = a26) MODULI_BUTTON_1_ALLEGATO = a27 MODULI BUTTON 2.configure(text = a2 8) MODULI_BUTTON_2_ALLEGATO = a29 # LINK BUTTON 1.configure(text = a30) LINK_BUTTON_1_ALLEGATO = a31 LINK BUTTON 2.configure(text = a32) LINK_BUTTON_2_ALLEGATO = a33 # LABEL_MAIL.insert(0, a34) # LABEL SETTORE 1.configure(text = a35) # AGGIORNATO_LABEL.configure(text = a3 8)Se io utilizzo il parte di codice per la ricerca colorato di verde , funziona tutto regolare; se io invece utilizzo la parte di codice colorato di viola ho il seguente errore : ('Motorola', None, None, '***', '**', 'https://stwebmanager.taly.it/', 'https://hda.taly.it/seade/setrade_amz_ric.aspx', '800-999.921', None, None, '079-90.69.727', '--', 'helpdesk@taly.it', 'Service (Pd)', 'SDA', '049-90.69.727', 'preventivi@taly.it', 'Procedura', 'C:/Procedure/Shell Cgm Python/Assistenze/Motorola/Procedura_portale.pdf', None, None, None, None, None, None, 'Modulo Richiesta', 'C:/Procedure/Shell Cgm Python/Assistenze/Motorola/Modulo compilazione del Cliente.pdf', None, None, None, None, None, None, 'servizioclienti@**.it', 'Tel', None, None, '2020-01-14') Traceback (most recent call last): File "Assistenze_db.py", line 583, in <module> a.tariffe_gestori(scelta) # marca File "Assistenze_db.py", line 204, in tariffe_gestori a1 ,a2 , a3 , a4 , a5 , a6 , a7 , a8 ,a9 , a10 , a11 , a12 , a13 , a14 ,a15 , a16, a17 , a18 , a19 , a20 , a21 , a22 , a23 , a24 , a25 , a26 , a27, a28 , a29 , a30 , a31 , a32 , a33 , a34 , a35 , a36 , a37 , a38 = c.fetchone() TypeError: cannot unpack non-iterable NoneType object Non capisco perchè !! Il db io con la parte verde lo leggo corretto e lo visualizzo in una interfaccia tkinter in maniera corretta. Vorrei utilizzare le righe in viola perchè la marca la selezione con una list box .... ma non va !!! Grazie --- Ultima modifica di trescon in data 2021-01-24 17:28:35 --- --- Ultima modifica di trescon in data 2021-01-24 17:30:02 --- ------
Alberto |
|
Scritto da RicPol |
2021-02-21 16:06:15 - Re: Problema con la ricerca in database da variabile
|
mah sai, quel codice è talmente pieno di righe commentate, parti colorate, faccio-così-ma-forse-poi-così... che non si capisce proprio che percorso il tuo codice fa quando ottieni l'errore. Leggere la documentazione *a fondo* (non uno sguardo diagonale in tredici secondi netti alla ricerca di quello che ti serve sul momento... no, intendo proprio *a fondo*...) e imparare i pattern "naturali" per usare sqlite aiuta senz'altro.
Per quanto posso dirti a colpo d'occhio: - c.execute("SELECT * FROM Marche WHERE Marca = ?", marcadacercare) è in effetti il pattern corretto (con "marcadacercare" una tupla, anche di un solo elemento). E' inutile assegnare questa espressione a una variabile "ric" di cui non ti farai niente, peraltro... - c.fetchone() restituisce una sola riga... e la restituisce come una singola tupla di elementi, NON come una lista di tuple... quindi fare "for row in c.fetchone()" non fa quello che tu credi che faccia... non stai iterando sulle RIGHE restituite, ma sugli ELEMENTI dell'unica riga che ti viene restituita; - una volta che la riga è restituita, guarda che è *consumata*... non ritorna più in quel cursore. Quindi fare "print(c.fetchone())" una prima volta per curiosare un po', e poi di nuovo "c.fetchone()" per iniziare a lavorare, non va bene. Il secondo fetchone() restituisce una riga diversa... e certo, se inoltre per puro caso il tuo database contenesse *una sola riga* con "Motorola"... ops, alla seconda saresti già panato perché la seconda riga... non esiste. Ora, come ripeto, tutto questo è molto semplice da vedere, dopo aver letto *a fondo* la documentazione di sqlite3. Ma in generale, quando hai problemi sull'api di qualcosa che usi, prova sempre a scrivere l'esempio minimo che innesca il problema, lasciando fuori tutti gli orpelli non necessari (le label, tkinter... ma che c'entra col tuo problema col database?). Se ti sforzi di fare questo, invece di ricopiare tutto sul forum, vedrai che nove su dieci il problema ti diventa chiarissimo, e lo capisci in un secondo. https://pythoninwindows.blogspot.com/p/i-miei-libri.html : i miei libri
https://pythoninwindows.blogspot.com : il mio blog |
Pagina: 1
Esegui il login per scrivere una risposta.