<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Daniele Varrazzo ha scritto:
<blockquote cite="mid:47A447C6.2040603@develer.com" type="cite">
  <pre wrap="">Crash Override ha scritto:
  </pre>
  <blockquote type="cite">
    <pre wrap="">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):
    </pre>
  </blockquote>
  <pre wrap=""><!---->
Ciao,

aiuterebbe avere un po' pi&ugrave; di contesto, ricordatene quando chiedi una mano :) 
Manda un paio di righe in pi&ugrave; della funzione di cui parli: non solo la stringa 
SQL ma anche come la usi, perch&eacute; il problema &egrave; (anche) l&igrave;.

  </pre>
  <blockquote type="cite">
    <pre wrap="">'''select qualcosa from qualcosaltro WHERE qualcosa = % (nomeStringa) s'''
    </pre>
  </blockquote>
  <pre wrap=""><!---->
di sicuro gli spazi in '% (nomeStringa) s' non servono. Questo non viene 
riconosciuto come segnaposto. Scrivi '%(nomeStringa)s'.

  </pre>
  <blockquote type="cite">
    <pre wrap="">dove nomeStringa lo prendo da un EvtText di una TextCtrl. Ecco... la 
query non d&agrave; rsultati! Il nome (nomeStringa) esiste perch&egrave; se lo scrivo 
io all'interno della query funziona! Inoltre ho provato a far stampare 
in un wx.dialog il testo della TextCtrl: &egrave; tutto 'regolare'. Il problema 
qual&egrave;? La TextCtrl aggiunge qualcosa che devo 'opportunamete' eliminare? 
Non mi sembra...
La stringa &egrave; presa da una funzione EvtText(evt) come evt.GetString().
    </pre>
  </blockquote>
  <pre wrap=""><!---->
Cos'&egrave; 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:
         ...

  </pre>
</blockquote>
Ho capito ora che forse il parametro va passato alla execute e non
direttamente come stringa sql. Dunque ho scritto una cosa del genere:<br>
<br>
def onQueryCustom(query, parameter):<br>
&nbsp;&nbsp;&nbsp; #creo una connessione con il database MySQL<br>
<br>
&nbsp;&nbsp;&nbsp; conn = MySQLdb.connect(host = "localhost", user = "root", passwd= "
... ", db = " ... ")<br>
<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; #creo un cursore che mi permette di operare sulle tabelle del db<br>
<br>
&nbsp;&nbsp;&nbsp; cur = conn.cursor()<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; #eseguo la query<br>
&nbsp;&nbsp;&nbsp; cur.execute(query, parameter)<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; #ottengo il risultati<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; tupleResult = cur.fetchall()<br>
&nbsp;&nbsp;&nbsp; #chiudo la connessione con il db<br>
&nbsp;&nbsp;&nbsp; listResult = list(tupleResult)<br>
&nbsp;&nbsp;&nbsp; conn.close()<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; return listResult<br>
<br>
<br>
la stessa di prima col parametro :)<br>
<br>
quindi self.filmResult = onQueryCustom('''SELECT final.titolo,
final.nazione, final.nome_cdp, final.anno, final.genere, final.trama,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final.durata,
p.locandina,p.fotobook, p.trailerbreve, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p.trailerlungo FROM(SELECT
info.idfilm, info.nazione, info.nome_cdp, info.anno, <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info.titolo, info.genere,
info.trama, info.durata<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from(SELECT * FROM realizzazione
natural join film) AS info WHERE info.titolo = '%(titoloF)s')<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; as final<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; natural join pubblicita p''',
titoloF)<br>
<br>
per&ograve; ora Python mi d&agrave; quest'errore : <br>
query = query % db.literal(args)<br>
TypeError: format requires a mapping<br>
<br>
<br>
Grazie<br>
P
</body>
</html>