AsIs
non è sicuro, a meno che tu non sappia davvero cosa stai facendo. Ad esempio, puoi usarlo per unit test.
Il passaggio dei parametri non è così pericoloso, purché non si preformatta la query sql. Non farlo mai:
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
Da user_input
potrebbe essere ';DROP DATABASE;'
per esempio.
Invece, fai:
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2
sanificherà la tua richiesta. Inoltre, puoi pre-sanitizzare i parametri nel tuo codice con la tua logica, se davvero non ti fidi dell'input del tuo utente.
Per psycopg2
la documentazione
:
Inoltre, non consentirei mai e poi mai ai miei utenti di dirmi quale tabella dovrei interrogare. La logica (o i percorsi) della tua app dovrebbero dirtelo.
Riguardo a AsIs()
, per psycopg2
la documentazione
:
Quindi, non usarlo con l'input dell'utente.