Daniele Varrazzo ha scritto:
Crash Override ha scritto:
Buongiorno.
Dopo aver letto sulla documentazione la giusta sintassi per inserire una stringa 'esterna' in una query MySQL con Python, scrivo (in un'oppurtuna funzione):

Ciao,

aiuterebbe avere un po' più di contesto, ricordatene quando chiedi una mano :) Manda un paio di righe in più della funzione di cui parli: non solo la stringa SQL ma anche come la usi, perché il problema è (anche) lì.

'''select qualcosa from qualcosaltro WHERE qualcosa = % (nomeStringa) s'''

di sicuro gli spazi in '% (nomeStringa) s' non servono. Questo non viene riconosciuto come segnaposto. Scrivi '%(nomeStringa)s'.

dove nomeStringa lo prendo da un EvtText di una TextCtrl. Ecco... la query non dà rsultati! Il nome (nomeStringa) esiste perchè se lo scrivo io all'interno della query funziona! Inoltre ho provato a far stampare in un wx.dialog il testo della TextCtrl: è tutto 'regolare'. Il problema qualè? La TextCtrl aggiunge qualcosa che devo 'opportunamete' eliminare? Non mi sembra...
La stringa è presa da una funzione EvtText(evt) come evt.GetString().

Cos'è nomeStringa? Il nome di una variabile locale? Dovrebbe essere la chiave di un dizionario passato come secondo argomento al metodo execute() del cursore. Per intenderci da te ci si aspetta:

     cnn = MySQLdb.connect(dsn)
     cur = cnn.cursor()

     sql = '''select qualcosa from qualcosaltro
              WHERE qualcosa = %(nomeStringa)s'''
     args = { 'nomeStringa': 'mio valore' }

     cur.execute(sql, args)

     for record in cur:
         ...

Ho capito ora che forse il parametro va passato alla execute e non direttamente come stringa sql. Dunque ho scritto una cosa del genere:

def onQueryCustom(query, parameter):
   #creo una connessione con il database MySQL

conn = MySQLdb.connect(host = "localhost", user = "root", passwd= " ... ", db = " ... ")

#creo un cursore che mi permette di operare sulle tabelle del db

   cur = conn.cursor()
#eseguo la query
   cur.execute(query, parameter)
#ottengo il risultati tupleResult = cur.fetchall()
   #chiudo la connessione con il db
   listResult = list(tupleResult)
   conn.close()
return listResult


la stessa di prima col parametro :)

quindi self.filmResult = onQueryCustom('''SELECT final.titolo, final.nazione, final.nome_cdp, final.anno, final.genere, final.trama, final.durata, p.locandina,p.fotobook, p.trailerbreve, p.trailerlungo FROM(SELECT info.idfilm, info.nazione, info.nome_cdp, info.anno, info.titolo, info.genere, info.trama, info.durata from(SELECT * FROM realizzazione natural join film) AS info WHERE info.titolo = '%(titoloF)s')
                                     as final
natural join pubblicita p''', titoloF)

però ora Python mi dà quest'errore :
query = query % db.literal(args)
TypeError: format requires a mapping


Grazie
P
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a