Domanda Python, collegare due combobox con un database, per far corrispondere una determinata voce del primo ad una diversa voce del secondo combobox

fisica-all

Utente Emerald
13 Aprile 2014
1,259
237
356
Credo il problema sia in SQL (?)
Codice:
cursor.execute('SELECT Citta FROM Info WHERE Regione')

Dovresti specificare la regione di cui vuoi le citta', ad esempio:

Codice:
cursor.execute('SELECT Citta FROM Info WHERE Regione=='Lazio'')

Se dovesse darti errori di qualche tipo, conviene sempre pubblicare anche l'errore riportato
 
  • Mi piace
Reactions: antonio92x

fisica-all

Utente Emerald
13 Aprile 2014
1,259
237
356
Usando la funzione format(), ti propongo una prima soluzione:

cursor.execute('SELECT Citta FROM Info WHERE Regione=='{0}').format(regione)


Ovviamente regione e' una variabile, il cui valore rappresenta la scelta del primo combobox da parte dell'utente
 
  • Mi piace
Reactions: antonio92x
Banner pubblicitario per Bright Data su Inforge.net azienda di vendita Proxy, Data Collector e Content Unlocker
Supporta Inforge con una donazione

fisica-all

Utente Emerald
13 Aprile 2014
1,259
237
356
Sono completamente arrugginito scusami

Un solo simbolo di =

Comunque il risultato ottenuto dipende poi dal database, se creato correttamente si', avrai quel risultato

Fammi sapere ovviamente!
 
  • Mi piace
Reactions: antonio92x

antonio92x

Utente Bronze
6 Giugno 2019
69
6
34
Ultima modifica:
Salve a tutti. Vorrei fare in modo che selezionando, ad esempio, una Regione in un combobox, nel combobox vicino escano i nomi delle Città "relative ad ogni regione selezionata". Ad esempio seleziono Lazio e mi esce Roma, Frosinone, Rieti, Latina, ecc.

Ho creato già il database (sql lite), ma non riesco a fare il modo che nel secondo combobox (Città) escano le città della Regione selezionata nel primo combobox. Non sono molto pratico di Python. Come posso fare? Grazie

Codice:
### DATABASE CHE LEGGE LE REGIONI ###
con = sqlite3.connect('/home/miopc/Scrivania/Database_SQLLite.db')
cursor = con.cursor()
cursor.execute('SELECT DISTINCT Regione FROM Info')
elenco1 = cursor.fetchall()
con.close()

### COMBOBOX REGIONI ###
regioni=ttk.Combobox(window,width=13)
regioni.place(x=5, y=190)
regioni['values'] = elenco1
regioni.current(0)

### DATABASE CHE LEGGE LE CITTA'###
con = sqlite3.connect('/home/miopc/Scrivania/Database_SQLLite.db')
cursor = con.cursor()
cursor.execute('SELECT Citta FROM Info WHERE Regione')
elenco2 = cursor.fetchall()
con.close()

### COMBOBOX CITTA ###
citta=ttk.Combobox(window,width=13)
citta.place(x=5, y=230)
citta['values'] = elenco2
citta.current(0)
 

antonio92x

Utente Bronze
6 Giugno 2019
69
6
34
Credo il problema sia in SQL (?)
Codice:
cursor.execute('SELECT Citta FROM Info WHERE Regione')

Dovresti specificare la regione di cui vuoi le citta', ad esempio:

Codice:
cursor.execute('SELECT Citta FROM Info WHERE Regione=='Lazio'')

Se dovesse darti errori di qualche tipo, conviene sempre pubblicare anche l'errore riportato
Nel primo combobox ci sono tutte le regioni d'Italia naturalmente. Quindi nel mio caso non va bene specificare solo una determinata regione in cursor.execute('SELECT Citta FROM Info WHERE Regione=='Lazio''). Come posso fare? Grazie ancora
 
Banner pubblicitario per Bright Data su Inforge.net azienda di vendita Proxy, Data Collector e Content Unlocker
Supporta Inforge con una donazione

antonio92x

Utente Bronze
6 Giugno 2019
69
6
34
Ultima modifica:
Usando la funzione format(), ti propongo una prima soluzione:

cursor.execute('SELECT Citta FROM Info WHERE Regione=='{0}').format(regione)


Ovviamente regione e' una variabile, il cui valore rappresenta la scelta del primo combobox da parte dell'utente
Provato! Quando clicco su Run Module non si apre e si seleziona di rosa la prima parentesi quadra che hai scritto (solo la parentesi quadra, senza ' o 0). Esce scritto Invalid Syntax
 

antonio92x

Utente Bronze
6 Giugno 2019
69
6
34
Ultima modifica:
Si scusa,
cursor.execute('SELECT Citta FROM Info WHERE Regione=='{0}''.format(regione))
Figurati, anzi grazie ancora. Però mi esce lo stesso messaggio di errore. Sempre allo stesso punto sulla prima parentesi graffa

AGGIUNGO: Riuscendo a risolvere questa cosa, quindi, il combobox2 delle Città sarà automaticamente collegato al combobox1 delle Regioni come da codice postato all'inizio? Cioè che seleziono ad esempio Lombardia nel combobox 1 e nel combobox 2 mi usciranno Milano, Monza, Bergamo, ecc?

P.S: Se ti serve saperlo, Città e Regione si trovano nella stessa tabella Info
 

antonio92x

Utente Bronze
6 Giugno 2019
69
6
34
Non ti preoccupare, anzi grazie per l'aiuto. Purtroppo riscontro ancora lo stesso problema. Errore di sintassi che evidenza la prima parentesi graffa. Hai qualche altra soluzione?
 
Banner pubblicitario per Bright Data su Inforge.net azienda di vendita Proxy, Data Collector e Content Unlocker
Supporta Inforge con una donazione

antonio92x

Utente Bronze
6 Giugno 2019
69
6
34
Inserisco sia lo screenshot che le righe. Ho provato a scrivere la riga in tutti i modi che mi hai gentilmente suggerito, ma riscontro sempre lo stesso identico problema. Non so se è importante, ma per curiosità ho provato a scrivere SELECT Citta FROM Info WHERE Regione= "Lazio" e nel secondo combobox quindi, mi escono regolarmente tutte le città del Lazio (nel primo combobox invece l'elenco di tutte le regioni d'italia). Quindi non credo sia un problema del database in quanto con una determinata Regione funziona.

Codice:
con = sqlite3.connect('/home/antonio/Scrivania/Database_SQLLite.db')
cursor = con.cursor()
cursor.execute('SELECT Citta FROM Info WHERE Regione='{0}''.format(regione))
elenco2 = cursor.fetchall()
con.close()

Schermata del 2021-06-10 17-05-29.png
 

fisica-all

Utente Emerald
13 Aprile 2014
1,259
237
356
cursor.execute("SELECT Citta FROM Info WHERE Regione=\'{0}\' ".format(regione))

Prova cosi', ho sbagliato a scrivere in quel modo perche' separa le stringhe. (Quando non programmi piu' da un po' ti dimentichi ogni cosa D: )
 
Supporta Inforge con una donazione
Banner pubblicitario per Bright Data su Inforge.net azienda di vendita Proxy, Data Collector e Content Unlocker

antonio92x

Utente Bronze
6 Giugno 2019
69
6
34
cursor.execute("SELECT Citta FROM Info WHERE Regione=\'{0}\' ".format(regione))

Prova cosi', ho sbagliato a scrivere in quel modo perche' separa le stringhe. (Quando non programmi piu' da un po' ti dimentichi ogni cosa D: )
Beh, certo, è normale non ricordare delle cose quando non programmi da un pò. Comunque adesso non mi da un errore di sintassi. Il form si apre normalmente, però il secondo combobox è vuoto. Ossia nel primo combobox seleziono una regione (ad esempio Lazio), ma il secondo combobox (dove dovrebbero uscire i nomi della città del Lazio) è vuoto
 

fisica-all

Utente Emerald
13 Aprile 2014
1,259
237
356
Perfetto, prova a stampare la variabile "regione" che poi andra' nella query che abbiamo appena sistemato, cosi' vediamo se il valore e' impostato o meno e cerchiamo di capire dove sia l'errore

Basta quindi un semplice:

print(regione)

prima o dopo la riga appena modificata
 
Banner pubblicitario per Bright Data su Inforge.net azienda di vendita Proxy, Data Collector e Content Unlocker
Supporta Inforge con una donazione