Sto avendo difficoltà a trovare alcuni sql in python per passare correttamente a MySQLdb. È la formattazione delle corde dei pitoni che mi sta uccidendo.Formati di stringhe Python con caratteri jolly SQL e LIKE
La mia istruzione sql utilizza la parola chiave LIKE con caratteri jolly. Ho provato una serie di cose diverse in Python. Il problema è che una volta che riesco a far funzionare uno di loro, c'è una riga di codice in MySQLdb che rutta sul formato stringa.
Tentativo 1:
"SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE '%%s%'" % (query)
Questo è un no go. Ottengo l'errore valore:
ValueError: unsupported format character ''' (0x27) at index 128
Tentativo 2:
"SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE '\%%s\%'" % (query)
ottengo lo stesso risultato dal tentativo 1.
Tentativo 3:
like = "LIKE '%" + str(query) + "%'" totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username " + like
Questo crea correttamente la totalq variabile, ma ora quando vado a eseguire la query ottengo errori da MySQLdb:
File "build/bdist.macosx-10.6-universal/egg/MySQLdb/cursors.py", line 158, in execute query = query % db.literal(args) TypeError: not enough arguments for format string
Tentativo 4:
like = "LIKE '\%" + str(query) + "\%'" totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username " + like
Questa è la stessa uscita come il tentativo 3.
Tutto questo sembra davvero strano. Come posso utilizzare i caratteri jolly nelle istruzioni sql con python?
Per echo @bernie di seguito: Da psycopg docs: http://initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters: "Mai, mai, MAI usare la concatenazione di stringhe Python (+) o interpolazione dei parametri delle stringhe (%) per passare variabili a una stringa di query SQL. "Oltre agli attacchi SQL injection, un secondo vantaggio è che il driver" può convertire automaticamente oggetti Python in e letterali SQL: usando questa funzione il tuo codice sarà più robusto e affidabile ". Questo contro" un ingenuo approccio alla composizione delle stringhe di query, ad es usando la concatenazione di stringhe. " –