Forum >> Programmazione Python >> Database >> sqlite3 in rete

Pagina: Indietro 1 2 3 Avanti

Buonasera, da prove fatte sembre funzionare senza errori di accessi simultanei…. Ora il problema è diverso.
Avendo il db che lavora in solitaria su un Nas, ora sorge il problema di avvisare l’utente destinatario dell’ultimo messaggio inviato al db. (Che è arrivato un nuovo messaggio x lui)

Come posso fare ?

Interrogare ogni tot secondi per verificare la presenza di messaggi nuovi da parte di tutte le postazioni coinvolte?

Come posso fare a capire se il messaggio è nuovo ? Nei campi del db non è previsto un campo ora ma solo la data. (Dovrei fare un confronto con uno stato precedente ….)

Grazie per i suggerimenti che riuscirete a darmi.
Ciao caro, potresti creare uno mini script che verifica la presenza di nuovi messaggi ogni tot tempo e poi, non so come è composto il tuo enviroment, si potrebbe "pushare" chi di dovere con la notifica del nuovo messaggio, ma devi implementare un mini sistema di pushing o magari usare altri servizi già pronti all'uso. Ma forse si sta sparando al moscerino col fucile da elefanti, in effetti potresti fare come hai descritto, lasciare che ogni postazione controlli ogni tot di tempo se ci sono nuovi messaggi, tanto hai poche postazioni se ricordo bene.

Per sapere se il messaggio è letto o meno guarda non impazzire, metti semplicemente uno status che una volta letto cambia lo stato del messaggio, identificando così se è letto o meno. Se non vuoi cambiare le tabelle attuali, aggiungine una con l'id del messaggio ed il suo status, che cambierai a seconda delle attività dell'utente. Metodo semplice ed efficace.

Hai davvero diverse strade davanti a te, devi solo provare a vedere quella più facile da realizzare ed a liberare la fantasia.

Buon divertimento e happy coding.

Daniele aka Palmux said @ 2024-04-05 08:56:53:
Buonasera, da prove fatte sembre funzionare senza errori di accessi simultanei…. Ora il problema è diverso.
Avendo il db che lavora in solitaria su un Nas, ora sorge il problema di avvisare l’utente destinatario dell’ultimo messaggio inviato al db. (Che è arrivato un nuovo messaggio x lui)

Come posso fare ?

Interrogare ogni tot secondi per verificare la presenza di messaggi nuovi da parte di tutte le postazioni coinvolte?

Come posso fare a capire se il messaggio è nuovo ? Nei campi del db non è previsto un campo ora ma solo la data. (Dovrei fare un confronto con uno stato precedente ….)

Grazie per i suggerimenti che riuscirete a darmi.
Ciao caro, potresti creare uno mini script che verifica la presenza di nuovi messaggi ogni tot tempo e poi, non so come è composto il tuo enviroment, si potrebbe "pushare" chi di dovere con la notifica del nuovo messaggio, ma devi implementare un mini sistema di pushing o magari usare altri servizi già pronti all'uso. Ma forse si sta sparando al moscerino col fucile da elefanti, in effetti potresti fare come hai descritto, lasciare che ogni postazione controlli ogni tot di tempo se ci sono nuovi messaggi, tanto hai poche postazioni se ricordo bene.

Per sapere se il messaggio è letto o meno guarda non impazzire, metti semplicemente uno status che una volta letto cambia lo stato del messaggio, identificando così se è letto o meno. Se non vuoi cambiare le tabelle attuali, aggiungine una con l'id del messaggio ed il suo status, che cambierai a seconda delle attività dell'utente. Metodo semplice ed efficace.

Hai davvero diverse strade davanti a te, devi solo provare a vedere quella più facile da realizzare ed a liberare la fantasia.

Buon divertimento e happy coding.


Grazie Daniele… anche perché se per caso le postazioni fanno delle interrogazioni contemporanee l’sqlite3 lo permette e non dovrebbe darmi errori/problemi ….. giusto.

Grazie
------
Alberto
ti consiglio di seguire gli ottimi suggerimenti in https://kerkour.com/sqlite-for-servers

(per imperscrutabili ragioni alcuni utenti non raggiungono quella pagina, che è comunque archiviata su https://archive.is/Xfjh6 )


THE 🍺-WARE LICENSE (Revision ㊷):
<㎝🐌🐍.🇮🇹> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Daniele aka Palmux said @ 2024-04-05 08:56:53:
Buonasera, da prove fatte sembre funzionare senza errori di accessi simultanei…. Ora il problema è diverso.
Avendo il db che lavora in solitaria su un Nas, ora sorge il problema di avvisare l’utente destinatario dell’ultimo messaggio inviato al db. (Che è arrivato un nuovo messaggio x lui)

Come posso fare ?

Interrogare ogni tot secondi per verificare la presenza di messaggi nuovi da parte di tutte le postazioni coinvolte?

Come posso fare a capire se il messaggio è nuovo ? Nei campi del db non è previsto un campo ora ma solo la data. (Dovrei fare un confronto con uno stato precedente ….)

Grazie per i suggerimenti che riuscirete a darmi.
Ciao caro, potresti creare uno mini script che verifica la presenza di nuovi messaggi ogni tot tempo e poi, non so come è composto il tuo enviroment, si potrebbe "pushare" chi di dovere con la notifica del nuovo messaggio, ma devi implementare un mini sistema di pushing o magari usare altri servizi già pronti all'uso. Ma forse si sta sparando al moscerino col fucile da elefanti, in effetti potresti fare come hai descritto, lasciare che ogni postazione controlli ogni tot di tempo se ci sono nuovi messaggi, tanto hai poche postazioni se ricordo bene.

Per sapere se il messaggio è letto o meno guarda non impazzire, metti semplicemente uno status che una volta letto cambia lo stato del messaggio, identificando così se è letto o meno. Se non vuoi cambiare le tabelle attuali, aggiungine una con l'id del messaggio ed il suo status, che cambierai a seconda delle attività dell'utente. Metodo semplice ed efficace.

Hai davvero diverse strade davanti a te, devi solo provare a vedere quella più facile da realizzare ed a liberare la fantasia.

Buon divertimento e happy coding.


Ciao, il mio problema ora è di far convivere nello stesso script l'interfaccia tkinter (che so essere task monopolizzate) e la routine che devo eseguire ogni 30/60 secondi per vedere se ci sono messaggi nuovi.

Come posso fare a far eseguire il task per la verifica finchè ho l'interfaccia tkinter in esecuzione ?




Grazie
------
Alberto
Ciao, il mio problema ora è di far convivere nello stesso script l'interfaccia tkinter (che so essere task monopolizzate) e la routine che devo eseguire ogni 30/60 secondi per vedere se ci sono messaggi nuovi.
Come posso fare a far eseguire il task per la verifica finchè ho l'interfaccia tkinter in esecuzione ?
I Miei saluti.




Segnalo che venerdì scorso, ad un mio tentativo (piuttosto voluminoso) di rispondere al quesito soprastante, si è avuta una anomalia che ha creato un riferimento senza titolo ed a me intestato nella sezione "database", non accessibile e visibile alla pagina di riepilogo delle sezioni, questo perché possano, eventualmente, prendersi provvedimenti inerenti.




Per il problema di @trescon, provo s rispondere ora in maniera succinta.

Hai diverse metodologie a disposizione, la più "immediata" (e forse problematica) è di creare un metodo/funzione che richiami ricorsivamente se stessa ogni tot di tempo utilizzando il metodo "after" delle finestre tkinter.

Personalmente evito di utilizzare la metodologia sopra, nel tempo ho preso l'abitudine, per situazioni non critiche, di utilizzare thread in parallelo, con un protocolli di comunicazione utilizzanti il pattern observer ed un intermediario di tipo singleton per lo smistamento delle comunicazioni, di norma senza l'uso di queue (dato che parlo di sistemi non critici) ... ho cercato di esemplificare in dettaglio ma sono intervenuti i problemi su detti.

Se ritieni Ti bisogni un esempio di tal genere fai sapere che cercherò di implementare un esempio minimale a Tuo uso e vedrò di spiegarlo altrove e poi vedo di renderlo disponibile.




Ciao

Fatti non foste a viver come bruti...
Ciao, il mio problema ora è di far convivere nello stesso script l'interfaccia tkinter (che so essere task monopolizzate) e la routine che devo eseguire ogni 30/60 secondi per vedere se ci sono messaggi nuovi.
Come posso fare a far eseguire il task per la verifica finchè ho l'interfaccia tkinter in esecuzione ?
I Miei saluti.




Segnalo che venerdì scorso, ad un mio tentativo (piuttosto voluminoso) di rispondere al quesito soprastante, si è avuta una anomalia che ha creato un riferimento senza titolo ed a me intestato nella sezione "database", non accessibile e visibile alla pagina di riepilogo delle sezioni, questo perché possano, eventualmente, prendersi provvedimenti inerenti.




Per il problema di @trescon, provo s rispondere ora in maniera succinta.

Hai diverse metodologie a disposizione, la più "immediata" (e forse problematica) è di creare un metodo/funzione che richiami ricorsivamente se stessa ogni tot di tempo utilizzando il metodo "after" delle finestre tkinter.

Personalmente evito di utilizzare la metodologia sopra, nel tempo ho preso l'abitudine, per situazioni non critiche, di utilizzare thread in parallelo, con un protocolli di comunicazione utilizzanti il pattern observer ed un intermediario di tipo singleton per lo smistamento delle comunicazioni, di norma senza l'uso di queue (dato che parlo di sistemi non critici) ... ho cercato di esemplificare in dettaglio ma sono intervenuti i problemi su detti.

Se ritieni Ti bisogni un esempio di tal genere fai sapere che cercherò di implementare un esempio minimale a Tuo uso e vedrò di spiegarlo altrove e poi vedo di renderlo disponibile.




Ciao


Ciao Nuzzopippo, se non ti è di troppo disturbo ..... CERTO che accetto un esempio esemplificato. Sono settimane che sono fermo con il "progetto" perchè non riesco a trovare come incastrare Tkinter con una routine che interviene ogni 4-6 secondi.

Grazie

Ciao



------
Alberto
Ciao Nuzzopippo, se non ti è di troppo disturbo ..... CERTO che accetto un esempio esemplificato. Sono settimane che sono fermo con il "progetto" perchè non riesco a trovare come incastrare Tkinter con una routine che interviene ogni 4-6 secondi.

Disturbo?, no, nessun disturbo, anzi, mi permette di scrostare la ruggine dal mio cervello di pensionato.




Non so se quello che Ti propongo sia un sistema di "pushing" del tipo indicato da @Palmux, è una metodologia che ho sviluppato nel corso del tempo per applicazioni che non richiedano aggiornamenti frenetici dei dati e si basa su di un oggetto singleton cui è possibile iscrivere dei metodi/funzioni di parti di una propria applicazione agente in thread separati in "gruppi" di osservatori che si scambiano messaggi (liste di dati in realtà) tra di loro.




Puoi vedere qui l'esempio che Ti ho preparato, consiste in una finestra che espone dei messaggi non letti inseriti in un database SQLite3 minimale, più o meno sulla falsa riga di come indicato da @Daniele posts fa, i messaggi sono da inserire esternamente, in una shell SQLite nel caso.

L'applicazione è composta da tre piccoli moduli, ognuno "specializzato" per un compito: comunicazione, lettura dati, esposizione e comando.

L'interazione tra le parti avviene tramite i "messaggi", che ho provato a spiegare, spero mi sia riuscito di essere chiaro.




Se ci sarà bisogno di chiarimenti, a disposizione, se riterrete, Tu e gli esperti, di farmi sapere cosa ne pensate mi farà piacere.

Ciao :)

Fatti non foste a viver come bruti...
Ciao Nuzzopippo, se non ti è di troppo disturbo ..... CERTO che accetto un esempio esemplificato. Sono settimane che sono fermo con il "progetto" perchè non riesco a trovare come incastrare Tkinter con una routine che interviene ogni 4-6 secondi.

Disturbo?, no, nessun disturbo, anzi, mi permette di scrostare la ruggine dal mio cervello di pensionato.




Non so se quello che Ti propongo sia un sistema di "pushing" del tipo indicato da @Palmux, è una metodologia che ho sviluppato nel corso del tempo per applicazioni che non richiedano aggiornamenti frenetici dei dati e si basa su di un oggetto singleton cui è possibile iscrivere dei metodi/funzioni di parti di una propria applicazione agente in thread separati in "gruppi" di osservatori che si scambiano messaggi (liste di dati in realtà) tra di loro.




Puoi vedere qui l'esempio che Ti ho preparato, consiste in una finestra che espone dei messaggi non letti inseriti in un database SQLite3 minimale, più o meno sulla falsa riga di come indicato da @Daniele posts fa, i messaggi sono da inserire esternamente, in una shell SQLite nel caso.

L'applicazione è composta da tre piccoli moduli, ognuno "specializzato" per un compito: comunicazione, lettura dati, esposizione e comando.

L'interazione tra le parti avviene tramite i "messaggi", che ho provato a spiegare, spero mi sia riuscito di essere chiaro.




Se ci sarà bisogno di chiarimenti, a disposizione, se riterrete, Tu e gli esperti, di farmi sapere cosa ne pensate mi farà piacere.

Ciao :)


Ciao Nuzzopippo, ho letto frugalmente (per ora) il tuo esempio e ho apprezzato il tuo " ... credo che l'essenziale sia tutto qui."

Mi rendo conto che sono indietro "anni Luce" con la conoscenza di Python.

Il tuo esempio è un portento a penso che lo capiro' tra qualche mese.... troppo sofisticato x me (almeno a prima vista); appena ho un attimo lo studiero attentamente ed eventualmente ti chiedero' lumi.

Grazie ancora per il lavorone che hai fatto x imbastirlo.



------
Alberto
... troppo sofisticato x me (almeno a prima vista); appena ho un attimo lo studiero attentamente ed eventualmente ti chiedero' lumi.
Fermo restando che sono a Tua disposizione per quel che posso, ciò che scrivi probabilmente denuncia una qualche pecca nella mia capacità di esposizione, essendo la mia conoscenza tutt'altro che sofisticata ... in fondo, la mia partecipazione ai post's è anche motivata proprio dal bisogno di "carpire" idee e tecniche che non conosco ancora.

Digerisci tranquillamente il codice con calma, poi, se e quando Lo riterrai se ne discute, son certo che si può far di meglio, magari discutendone lo scopriamo assieme il "come".




Ciao :)

Fatti non foste a viver come bruti...
... troppo sofisticato x me (almeno a prima vista); appena ho un attimo lo studiero attentamente ed eventualmente ti chiedero' lumi.
Fermo restando che sono a Tua disposizione per quel che posso, ciò che scrivi probabilmente denuncia una qualche pecca nella mia capacità di esposizione, essendo la mia conoscenza tutt'altro che sofisticata ... in fondo, la mia partecipazione ai post's è anche motivata proprio dal bisogno di "carpire" idee e tecniche che non conosco ancora.

Digerisci tranquillamente il codice con calma, poi, se e quando Lo riterrai se ne discute, son certo che si può far di meglio, magari discutendone lo scopriamo assieme il "come".




Ciao :)


Ciao, finchè digerisco il tuo esempio (che però ho cominciato a mangiare da poco poco), avevo cominciato a fare esperimenti con asyncio.

Ho provato a inserire un esempio preso da un sito e adattato alle mie esigenze di prova; ho provato a inserirlo nel programma che sto facendo, inserendo il comando per lanciare la routine asyncio sia prima che si avvii la root di tkinter sia (chiaramente ho tolto la prima) dentro la stessa .... e non cambia nulla.

Praticamente mi parte a routine di asyncio ma il resto del programma (tkinter) di avvia solo dopo che la routine asyncio finisce ...... ma non dovrebbe andare in contemporanea (anche se non realmente in parallelo) ?

Allego lo stupidissimo esempio usato :

async def controlla():
	for i in range(1, 30):
        print(f"conta: {i}")
        await asyncio.sleep(1)

async def main():
	task = asyncio.create_task(controlla())
	await task



asyncio.run(main())
Io pensavo (perchè non conosco ancora asyncio) che mentre io utilizzavo l'interfaccia tkinter, in contempornea mi avanzava il contatore.

Anche perchè il db dei messaggi io l'ho già fatto e lo leggo , scrivo , descimino i messaggi letto/non letto , ma non riesco a far girare una routine contemporanea per notificarmi i messaggi nuovi.

Spero di essere stato chiaro e scusare il pippone
------
Alberto


Pagina: Indietro 1 2 3 Avanti



Esegui il login per scrivere una risposta.