Forum >> Programmazione Python >> Database >> Inserire variabili MySQLdb

Pagina: 1

ciao a tutti uso python 2.7 ed ho dei dati in un array da inserire nel mio database mysql,il codice:




import MySQLdb






db=MySQLdb.connect(host='host',

user='root',

passwd='pas',

db='test'

)

cur=db.cursor()





a=[formaggio,patate,spezzatino]





for x in range (len(a)):

print ax

cur.execute("INSERT INTO `test`.`tabella` (spesa)VALUES (%s)",(ax))


print ("Fine")




Non scrivo i vari input,perché il problema è qui,infatti INSERT va a buon fine perché l'id viene incrementato ma il valore non viene inserito,quindi rimane vuoto :\
Ciao Khan, rivedi il tuo ciclo di inserimento con qualcosa di simile al seguente:

for x in a:
    cur.execute("INSERT INTO `test`.`tabella`(spesa) VALUES(%s)",(x))
Nota: assolutamente non è testato, quindi fai qualche prova.

Ciao.
Daniele


--- Ultima modifica di Daniele aka Palmux in data 2015-09-07 20:01:41 ---
a[ x ] non ax; comunque ho fatto così ma:


cur.execute("INSERT INTO `test`.`tabella` (spesa) VALUES (%s)" %a[ x ])





OperationalError: (1054, "Unknown column 'formaggio' in 'field list'")






spero che si vedano le quadre. ho inserito dei dati manualmente:

questo è lo script che mi propone il db :/




INSERT INTO `test`.`tabella` (`spesa`) VALUES ('prova');



consigli?


--- Ultima modifica di khan in data 2015-09-07 18:42:15 ---
a[ x ] non ax; comunque ho fatto così ma:
No, non è corretto. Prova a "ciclare" la tua lista, cosa ottieni?

>>> a = ["formaggio","patate","spezzatino"]

>>> for i in a:
...      print i
formaggio
patate
spezzatino

Ecco, quelli sono i valori che vuoi inserire. Quindi trasliamo tutto sulla tua query:

[...]
for i in a:
    cur.execute("INSERT INTO `test`.`tabella` (spesa) VALUES(%s)",(i,))
    [...]
Prova così e fai sapere.

Cya


--- Ultima modifica di Daniele aka Palmux in data 2015-09-07 21:15:20 ---
Ok,il problema è il database. ma non capisco il perché :/ cioè l'id aumenta ma il valore non è inserito,che sia esso un elemento di una lista,una variabile o qualsiasi altro elemento non va.



Uso mysql workbench 6.3 CE. in locale




Mi potresti consigliare un altro database?


--- Ultima modifica di khan in data 2015-09-07 20:40:30 ---
Ok,il problema è il database. ma non capisco il perché :/ cioè l'id aumenta ma il valore non è inserito,che sia esso un elemento di una lista,una variabile o qualsiasi altro elemento non va.

Guarda non amo MySQL, ma sono certo che il problema non sia nel database.

Commetti qualche errore, come l'ho commesso io nell'esempio sopra omettendo una virgola (infatti l'input deve essere una tupla).

Mi potresti consigliare un altro database?


Mi ripeto, è un problema di pilota, non di macchina.

Cya
Ok risultato parziale-cioè da capire(:-



import _mysql

db=_mysql.connect("localhost","root","pass","test")

db.query("""INSERT INTO `test`.`tabella` (spesa) VALUES('prova')""")




ok questo mi va,adesso sto cercando di ficcarci dentro la variabile i primi tentativi sono:





for x in range (len(a)):

db.query("INSERT INTO `test`.`tabella` (spesa) VALUES(%s)",(a[ x ]))






db.query("INSERT INTO `test`.`tabella` (spesa) VALUES(%s)",(ax))

TypeError: query() takes exactly 1 argument (2 given)






for i in a:

print (i)

db.query("""INSERT INTO `test`.`tabella` (spesa) VALUES(%s)""",(i))






db.query("""INSERT INTO `test`.`tabella` (spesa) VALUES(%s)""",(i))

TypeError: query() takes exactly 1 argument (2 given)




Khan ci stai girando intorno al problema, ma se leggi con attenzione quanto ti ho scritto è già risolto. Prima una nota sull'ultimo tuo messaggio.

If you want to write applications which are portable across databases, use MySQLdb, and avoid using this module directly. _mysql provides an interface which mostly implements the MySQL C API. For more information, see the MySQL documentation. The documentation for this module is intentionally weak because you probably should use the higher-level MySQLdb module. If you really need it, use the standard MySQL docs and transliterate as necessary.

Quindi tornando a noi ti scrivo il codice completo che ho appena testato e funziona, stai attento anche alle singole virgole, ieri un nostro "collega" del forum mi ha fatto notare che avevo commesso una leggerezza che forse ti ha distratto. Inoltre dimmi come è composta la tabella, sopratutto che tipo di colonne hai creato.

Immagino che la colonna spesa sia un varchar e quindi il codice sarebbe:

#Importo il modulo e mi connetto
import MySQLdb
db = MySQLdb.connect(host = 'host', user = 'root', passwd = 'pas', db = 'test')
cursore = db.cursor()

#Lista da inserire
a = ["formaggio","patate","spezzatino"]

#Ciclo la lista e la inserisco
for i in a:
    cursore.execute("INSERT INTO `test`.`tabella`(spesa) VALUES(%s)",(i,))

db.commit()
db.close()

Visto che il markdown fa come cazzo vuole, ti ho messo tutto anche su Pastebin così non puoi sbagliare.

Cya


--- Ultima modifica di Daniele aka Palmux in data 2015-09-08 17:39:54 ---
Funziona *-*
Grazie del tempo speso,e scusa il disturbo (:
Grazie del tempo speso,e scusa il disturbo (:

Non è un disturbo, è un piacere.

Ciao.
Daniele


Pagina: 1



Esegui il login per scrivere una risposta.