<!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ù 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ì.
</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à 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().
</pre>
</blockquote>
<pre wrap=""><!---->
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:
...
</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>
#creo una connessione con il database MySQL<br>
<br>
conn = MySQLdb.connect(host = "localhost", user = "root", passwd= "
... ", db = " ... ")<br>
<br>
<br>
#creo un cursore che mi permette di operare sulle tabelle del db<br>
<br>
cur = conn.cursor()<br>
<br>
#eseguo la query<br>
cur.execute(query, parameter)<br>
<br>
#ottengo il risultati<br>
<br>
tupleResult = cur.fetchall()<br>
#chiudo la connessione con il db<br>
listResult = list(tupleResult)<br>
conn.close()<br>
<br>
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>
final.durata,
p.locandina,p.fotobook, p.trailerbreve, <br>
p.trailerlungo FROM(SELECT
info.idfilm, info.nazione, info.nome_cdp, info.anno, <br>
info.titolo, info.genere,
info.trama, info.durata<br>
from(SELECT * FROM realizzazione
natural join film) AS info WHERE info.titolo = '%(titoloF)s')<br>
as final<br>
natural join pubblicita p''',
titoloF)<br>
<br>
però ora Python mi dà quest'errore : <br>
query = query % db.literal(args)<br>
TypeError: format requires a mapping<br>
<br>
<br>
Grazie<br>
P
</body>
</html>