Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 1, 2012 11:10:32

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

row sql

Добрый день!
Есть задача: в бд создается временная таблица для обрабтки:

tblname="tmp_tbl_%s_%s" % (userid, flname) # таблица вида: tmp_tbl_1_889003198403_01112012
cur=connection.cursor()
cur.execute('create table %s (code integer, name varchar(255), \
producer varchar(255));', [tblname])
При создании выдает ошибку:
syntax error at or near “E'tmp_tbl_1_889003198403_01112012'”
LINE 1: create table E'tmp_tbl_1_889003198403_01112012' (code intege…
Проблема в том, что вместо tmp_tbl_1_889003198403_01112012 в запрос ставится “E'tmp_tbl_1_889003198403_01112012'”.
Вопрос: чем это может быть вызвано и как это исправить?



Офлайн

#2 Ноя. 1, 2012 13:11:52

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

row sql

Ты же как параметр SQL-запроса передаёшь, оно и экранирует.
В плане безопасности наверно можешь quote_name (https://github.com/django/django/blob/master/django/db/backends/postgresql_psycopg2/operations.py#L71-74) заюзать ну и формировать запрос банальным форматированием строк

Отредактировано slav0nic (Ноя. 1, 2012 13:31:27)

Офлайн

#3 Ноя. 1, 2012 13:32:28

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

row sql

гмм, так и понял
В принципе, экранирование нужно при извлечении данных из ячейки таблицы. Если я обрабатываю таблицу select-ом (на основе этой таблицы и существующих моделей будет строиться запрос, объединяющий join-ом поля из нескольких таблиц) - по идее можно не бояться, что в ячейках будет записано нечто вроде “delete * from tablename” - ведь конкретная ячейка браться не будет. Так?



Офлайн

#4 Ноя. 1, 2012 13:35:42

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

row sql

глянь я редактировал пост выше, бояться стоит, юзай quote_name, в джанге в бекенде им везде оборачивают имена таблиц

Отредактировано slav0nic (Ноя. 1, 2012 13:35:56)

Офлайн

#5 Ноя. 1, 2012 13:39:43

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

row sql

Не, имя таблицы формируется у меня на сервере. Юзер не может воздействовать на него. Фишка в данных, которые закачиваются в таблицу.
Эти данные - отправляет пользователь. И, теоретически, может набросать чего только вздумает.



Офлайн

#6 Ноя. 1, 2012 13:40:45

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

row sql

slav0nic
В плане безопасности наверно можешь quote_name (https://github.com/django/django/blob/master/django/db/backends/postgresql_psycopg2/operations.py#L71-74) заюзать ну и формировать запрос банальным форматированием строк
Хорошо бы, конечно, глянуть. Но доступ сильно ограничен. Придется ждать вечера.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version