Создание динамически типизированных таблиц с использованием встроенного форматирования psycopg2 - PullRequest
0 голосов
/ 13 июня 2019

Я работаю над проектом на Python, который взаимодействует с хранилищем данных PostgreSQL, и я использую API psycopg2. Я ищу для создания динамически типизированных таблиц.

Например: я хотел бы иметь возможность выполнить следующий код:

from psycopg2 import connect, sql

connection = connect(host="host", port="port", database="database", user="user", password="pw")

def create_table(tbl_name, col_name, col_type):
    query = sql.SQL("CREATE TABLE {} ({} {})".format(sql.Identifier(tbl_name), sql.Identifier(col_name), sql.Identifier(column_type)))
    connection.execute(query)

create_table('animals', 'name', 'VARCHAR')

и заканчивается таблицей с именем «animals», содержащей столбец «name» типа VARCHAR. Однако, когда я пытаюсь выполнить это, я получаю сообщение об ошибке: «тип« VARCHAR »не существует». Я предполагаю, что встроенный форматировщик psycopg2 помещает двойные кавычки вокруг типа VARCHAR, когда их не должно быть. Обычно я бы сам обошел это, но документация очень ясна, что конкатенация строк Python никогда не должна использоваться из-за боязни атак с использованием SQL-инъекций. Безопасность является проблемой для этого проекта, поэтому я хотел бы знать, возможно ли создавать таблицы с динамической типизацией таким образом, используя pyscopg2, и если нет, существует ли другой сторонний API, который может сделать это безопасно. Спасибо!

Дэнни

...