psycopg2 E 'на столе, поле и схеме - PullRequest
1 голос
/ 09 июня 2011

У меня та же проблема, что и: python добавляет "E" к строке

Все ответы даны, но я ломаю шею от этого.

Проблема в том, что psycopg2 не только экранирует значения, но и имена схем, таблиц и столбцов, например:

CREATE TABLE E'Tablename' (E'identificatie' VARCHAR(16))

Что это просто не должно! Как я могу избавиться от E и '' для имен таблиц и столбцов, но сохранить их для значений полей?

альтернатива

'CREATE TABLE ' + tablename + ' (' + fieldname... %

делает его уязвимым для SQL-инъекций снова и снова.

Застрял между камнем и наковальней ..

Ответы [ 2 ]

1 голос
/ 09 июня 2011

К лучшему или к худшему, как правило, интерфейсы Python и Psycopg, в частности, не поддерживаются для замены пользовательских идентификаторов в командах SQL. Вы должны будете катиться самостоятельно. Это можно сделать с помощью нескольких строк кода.

0 голосов
/ 15 июня 2011

Хорошо, спасибо, Питер, по крайней мере, я знаю, чтобы не смотреть дальше.Я решил использовать другой подход:

Использовать файл сценария для генерации базы данных вместо генерации ее из кода.Это упростит «управление версиями» в базе данных.

Тем временем я смотрю на sqlalchemy http://www.sqlalchemy.org/, который в значительной степени делает то, что я хочу, но в настоящее время это далекопоскольку это требует кардинальной перестройки приложения, я перестраиваю

...