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