Найти - Пользователи
Полная версия: Как правильно параметрировать SQL-запрос типа INSERT
Начало » Базы данных » Как правильно параметрировать SQL-запрос типа INSERT
1
Begimot
Дорогие друзья!
Прошу подсказку.

Использую библиотеку psycopg2 для формирования запросов такого вот плана, как показано ниже.
Делаю контактацию и, естественно, получаю уязвимость

          insert_sql_str = (f"INSERT INTO {data_tab_name} "
                                  f"(tag_name, date_of_data, {field_str}, write_date) "
                                  f"VALUES ('{tag_name}', '{shift_sys_time_str}', {val_str}, current_timestamp)")
         cursor.execute(insert_sql_str)

Хочу переделать на запрос с параметрами. ЧИтал-читал, пробовал, но ничего не вышло.
Подскажите, какую схему параметрирования запроса тут лучше применить?
И вообще, можно ли в качестве параметра указывать наименование таблицы, наименования поля?

Begimot
Кое что уже нашел сам, но не хватает совсем чуть-чуть для полного счастья.

Я научился подставлять наименование ТАБЛИЦЫ и все параметры.
Осталось наименование ПОЛЯ (оно там одно).
Кто знает, как в эту конструкцию закинуть и наименование поля?
Спасибо!
                     cursor.execute(
                            sql.SQL(
                                "insert into {table} (tag_name, date_of_data, " + field_str + ", write_date)"
                                "values (%s, %s, %s, current_timestamp)"
                                    )
                            .format(table=sql.Identifier(data_tab_name)), [tag_name, shift_sys_time_str, val_str]
                    )
Begimot
Нашел! Спасибо, что были со мной в трудную минуту!

                     cursor.execute(
                            sql.SQL(
                                "insert into {table} (tag_name, date_of_data, {field}, write_date)"
                                "values (%s, %s, %s, current_timestamp)"
                                    )
                            .format(table=sql.Identifier(data_tab_name), field=sql.Identifier(field_str)),
                            [tag_name, shift_sys_time_str, val_str]
                    )
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB