Использование Python и psycopg2 Я пытаюсь построить динамический SQL-запрос для вставки строк в таблицы.
Переменные:
1. Название таблицы
2. Список переменных имен столбцов
3. Переменный список значений, в идеале ввод нескольких строк в одном выражении
Проблемы, с которыми я столкнулся, - это обработка строковых литералов от Python до SQL и psycopg2, пытающиеся избежать того, чтобы вы подвергали свой код атакам SQL-инъекций.
Используя модуль SQL из psycopg2, я решил динамически добавлять имя таблицы и список столбцов. Однако я действительно борюсь с добавлением ЗНАЧЕНИЙ. Сначала значения помещаются в запрос как% (val) s и, похоже, буквально передаются в базу данных буквально так, что вызывает ошибку.
Во-вторых, я хотел бы иметь возможность добавлять несколько строк одновременно.
Код ниже. Вся помощь очень ценится :) 1017 *
import psycopg2 as pg2
from psycopg2 import sql
conn = pg2.connect(database='my_dbo',user='***',password='***')
cols = ['Col1','Col2','Col3']
vals = ['val1','val2','val3']
#Build query
q2 = sql.SQL("insert into my_table ({}) values ({})") \
.format(sql.SQL(',').join(map(sql.Identifier, cols)), \
sql.SQL(',').join(map(sql.Placeholder,vals)))
Когда я печатаю эту строку как print (q2.as_string (conn)), я получаю:
вставить в my_table ("Col1", "Col2", "Col3") значения% (val1) s,% (val2) s,% (val3) s
И затем, когда я пытаюсь выполнить такую строку, я получаю следующую ошибку:
ProgrammingError: синтаксическая ошибка в или около "%"
LINE 1: ... ("Col1", "Col2", "Col3") значения (% (val1) s ...
^