Формирование оператора вставки с одинарными кавычками в Python с помощью Postgres

У меня есть поле под названием комментарии. Я эффективно пытаюсь прочитать значения из одной большой таблицы в несколько таблиц. Следовательно, мой запрос на выборку выбирает для меня поле комментария.

Я создаю сценарий Python для копирования из таблицы в таблицу. Мой запрос вставки не выполняется, когда он встречает поле комментария, например "Извините! Мы не можем обработать ваш заказ" из-за одинарной кавычки.

Я пытался использовать $ кавычки, но тщетно

Вот что я пытаюсь

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect("dbname='postgres' user='postgres' host='localhost' )
mark=conn.cursor()
/* fectching the rows and doing other stuff */

addthis="insert into my_table(something) values("$$"+str(row[8])+"$$")
mark.execute(addthis)
conn.commit()

Ценю помощь!

2 ответа

Решение
  1. Ваше заявление вставки должно использовать заполнитель. В случае psycopg2 это %s,
  2. Вы должны передать параметр (ы) в качестве второго аргумента execute(), Таким образом, у вас не будет проблем с цитированием, и вы защититесь от SQL-инъекций.

Например:

addthis = "INSERT INTO my_table (something) VALUES (%s);"
mark.execute(addthis, ('a string you wish to insert',))

Вы можете использовать заполнитель, как предложено Берни. Это предпочтительный способ.
Однако существуют ситуации, когда использование заполнителя невозможно. Затем вы должны покинуть qoutes вручную. Это делается путем их обратной косой черты:

addthis="insert into my_table(something) values(%s)" % str(row[8]).replace('"', r'\"').replace("'", r"\'")
mark.execute(addthis)
Другие вопросы по тегам