Forum
>>
Programmazione Python
>>
Database
>>
scrivere un valore ottenuto in un database
Pagina: 1 2 Avanti
Esegui il login per scrivere una risposta.
Scritto da Andrea Ubaldi |
2018-02-07 21:40:13 - scrivere un valore ottenuto in un database
|
Ciao a tutti,
sono nuovo del forum e ho intrapreso da poco il linguaggio python. Ho una domanda....eseguo il primo script e nessun problema. Il valore che ottengo stampato dovrei scriverlo in un database nel mio caso mysql. ho scritto anche lo script per la scrittura nel database con un valore di test e nessun problema. Non riesco a collegarli e scrivere in automatico il valore ottenuto nel database SCRIPT DOVE OTTENGO IL VALORE: import sys f = open('/dev/hidraw0','rb') #leggo il dispositivo data = '' while 1: buffer = f.read(10) #leggo il valore del dispositivo for char in buffer: if ord(char): output = int("0x"+str(ord(char)),base=16) + 1 #conversione del valore in intero print chr(output) SCRIPT DI SCRITTURA NEL DB: import MySQLdb db = MySQLdb.connect("localhost", "utente", "password", "nome db") curs=db.cursor() try: curs.execute ("""insert into nometabella(nomecolonna) values("test")""") db.commit() print "comando inviato" except: print "errore query" db.rollback() db.close() per farmi capire meglio io dovrei sostituire il valore test con il valore stampato chr(output) Grazie mille per le eventuali risposte!!! |
|
Scritto da Daniele aka Palmux |
2018-02-08 08:56:40 - Re: scrivere un valore ottenuto in un database
|
Ciao a te e benvenuto.
Per scrivere codice Python in questo forum, devi usare il pulsante code che trovi in alto, vicino alla tavolazza dei colori, quando sei in inserimento testo. Anche se non hai specificato che tipo di errore ottieni, per l'inserimento nel DB dovresti usare qualcosa tipo: curs.execute("""INSERT INTO nometabella(nomecolonna) VALUES (%s)""",(tuo_valore_da_inserire))Fai sapere. Daniele |
|
Scritto da Andrea Ubaldi |
2018-02-08 19:38:15 - Re: scrivere un valore ottenuto in un database
|
scusate per l'errore!!
questo è lo script contenuto al'interno de file prova.py: import sys f = open('/dev/hidraw0','rb') #leggo il dispositivo data = '' while 1: buffer = f.read(8) #leggo il valore del dispositivo for char in buffer: if ord(char): output = int("0x"+str(ord(char)),base=16) + 1 #conversione del valore in intero print chr(output) if chr(output)>0: import MySQLdb db = MySQLdb.connect("localhost", "utente", "password", "home") curs=db.cursor() try: curs.execute ("""insert into nometabella(nomecolonna) values(%s)""", (chr(output))) db.commit() print "comando inviato" except: print "errore" db.rollback() db.close()e questo è il messaggio di errore che mi viene stampato: File "prova.py", line 12 import MySQLdb ^ IndentationError: expected an indented block |
|
Scritto da Daniele aka Palmux |
2018-02-09 01:10:53 - Re: scrivere un valore ottenuto in un database
|
Sposta import MySQLdb ad inizio file o dai comunque un invio prima della riga dove lo importi, per staccarlo dal blocco precedente.
Cya |
|
Scritto da Andrea Ubaldi |
2018-02-10 17:35:30 - Re: scrivere un valore ottenuto in un database
|
Grazie per il consiglio era la prima volta che facevo uno script con due import. INCOMINCIA A FUNZIONARE!!!!
import sys import MySQLdb f = open('/dev/hidraw0','rb') #leggo il dispositivo data = '' while 1: buffer = f.read(16) #leggo il valore del dispositivo for char in buffer: if ord(char): output = int("0x"+str(ord(char)),base=16) + 1 #conversione del valore in intero a = chr(output) db = MySQLdb.connect("localhost", "utente", "password", "home") #connessione a db curs=db.cursor() try: curs.execute ("""insert into nometabella(nomecolonna) values(%s)""",(a)) #eseguo query db.commit() print "comando inviato" except: print "comando non inviato" db.rollback() db.close()riesco a leggere i valori dal dispositivo nel mio caso una pistola barcode e scrivere la variabile a nel db. Adesso il bug è che i valori non vengono inseriti tutti in una row ma viene creata una row per ogni valore, nel mio caso vengono create 14 rows perchè il barcode è formato da 14 numeri. Per adesso ottimo risultato! |
|
Scritto da Andrea Ubaldi |
2018-02-14 11:26:01 - Re: scrivere un valore ottenuto in un database
|
purtroppo non riesco a trovare una soluzione data dalla mia inesperienza.....tutte le prove che faccio non portano da nessuna parte. Non riesco a ragruppare tutti i valori ottenuti in un'unica stringa ma mi vengono stampati uno alla volta. Potete darmi una dritta così da poter trovare la soluzione? Grazieeee
|
|
Scritto da Daniele aka Palmux |
2018-02-14 12:38:48 - Re: scrivere un valore ottenuto in un database
|
Puoi semplicemente usare il ciclo per creare un oggetto (lista, tupla, etc...) e poi inserire i dati in un secondo momento. Ottenendo ad esempio una lista, potresti accedere ad ogni singolo elemento della con lista[0], lista[1], lista[n]... e compilare in questo modo la tua query.
Prova e facci sapere quando risolvi. Cya --- Ultima modifica di Daniele aka Palmux in data 2018-02-14 12:39:50 --- |
|
Scritto da Andrea Ubaldi |
2018-03-06 23:03:20 - Re: scrivere un valore ottenuto in un database
|
Ci sono quasi
import sys import MySQLdb f = open('/dev/hidraw0','rb') #leggo il dispositivo lista = [] i = 0 db = MySQLdb.connect("localhost", "utente", "password", "nome_db") curs=db.cursor() while 1 == 1 : buffer = f.read(16) #leggo il valore del dispositivo for char in buffer: if ord(char): output = int("0x"+str(ord(char)),base=16) + 1 #conversione del valore in intero a = [chr(output)] i = i + 1 if i == 1: b = lista + a elif i == 2: c = b + a elif i == 3: d = c + a elif i == 4: e = d + a elif i == 5: r = e + a elif i == 6: g = r + a elif i == 7: h = g + a elif i == 8: l = h + a elif i == 9: m = l + a elif i == 10: n = m + a elif i == 11: o = n + a elif i == 12: p = o + a elif i == 13: q = p + a elif i == 14: i = 0 print q curs.execute ("""insert into nome_tabella(nome_colonna) values(%s)""", q0) db.commit() print "comando inviato" db.rollback() db.close()questo è lo script dove ho avuto dei risultati. Creo la lista la stampo su monitor e mi collego correttamente al db scrivendo l'elemento con indice 0. Il problema è che non riesco a inserire tutta la lista nella query..... ho provato in vari modi ma senza risultato. - """, q0, q1, qn) - """, (q0, q1, qn)) - """, (q0), (q1), (qn))) Sicuramente creo un errore nella sintassi o per inserire più elementi di una lista non è il modo corretto. Attendo consigli Grazieee |
|
Scritto da Daniele aka Palmux |
2018-03-07 09:58:42 - Re: scrivere un valore ottenuto in un database
|
Ci sono alcune cose che non vanno bene:
1. while 1 == 1 anche se non è sbagliato in senso assoluto, è perlomeno ridondante, meglio while 1; 2. L'indentazione delle query di inserimento non è corretta. In questo modo inserisci nel DB solo quando i == 14 e non è quello che vuoi; 3. Perché fai il rollback, sai a cosa serve? Non ho controllato la sintassi esatta, quel compito lo lascio a te, ma controlla quanto ti ho scritto e vedrai che perlomeno i dati al DB li mandi. Cya |
|
Scritto da Andrea Ubaldi |
2018-03-07 13:05:20 - Re: scrivere un valore ottenuto in un database
|
Rileggendo bene Mysql avevo frainteso rollback pensando che terminasse solo la transazione invece la termina e annulla. In questo caso credo proprio non mi serva. Grazie per la precisazione e appena faccio le modifiche farò sapere cosa succede.
|
Pagina: 1 2 Avanti
Esegui il login per scrivere una risposta.