[Python] query con MySQL
Crash Override
crash.ovd a gmail.com
Sab 2 Feb 2008 12:25:06 CET
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
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20080202/cb357b81/attachment.htm
More information about the Python
mailing list