J'utilise psycopg2
en python (2.7.10) pour me connecter à une base de données postgresql. Les documents sont assez claires sur la composition des instructions SQL dynamiques:Composer une chaîne SQL dynamique avec psycopg2
Jamais, jamais, jamais utiliser la concaténation de chaîne Python (+) ou les paramètres de chaîne interpolation (%) pour passer des variables à une chaîne de requête SQL. Pas même sous la menace d'une arme.
Dans psycopg2
version 2.7, il y a le nouveau module sql
pour faire cette composition de chaîne d'une manière sûre contre l'injection SQL. Je ne comprends pas cependant comment construire correctement une déclaration comme:
import psycopg2 as ps
C = psycopg.connect(host='my_host', port=Port, database='My_DB')
cur = C.cursor()
schema = 'some_schema'
table = 'some_table'
SQL = cur.execute("SELECT * FROM "+schema+"."+table"+";")# This is horribly wrong
SQL = cur.execute("SELECT * FROM some_schema.some_table;") # That's what the result should be
Il me manquait l'idée join(). – Dschoni