psycopg2.sql Вставка типа переменной с помощью sql.Identifier приводит к тому, что тип "integer" не существует - PullRequest
2 голосов
/ 06 апреля 2019

Я пытаюсь динамически создавать таблицы с помощью psycopg2.sql, я написал функцию, которая принимает список кортежей, состоящий из имени столбца и типа данных столбца, затем я создаю строку, вызываю ее запросом, используя "{} "как заполнители, подобные этому:

create table {} ({} {}, {} {} ...);

Я выравниваю список кортежей, чтобы элементы в результирующем списке соответствовали порядку, в котором я хочу вставить их в строку запроса и использоватьрезультирующий список в качестве аргумента в sql.SQL (запрос) .format (...)

Результирующий экземпляр sql.Composed выглядит так:

Composed([SQL('create table '), Identifier('games'), SQL(' ( '), Identifier('score_loser'), SQL(' '), Identifier('integer'), SQL(' , '), Identifier('playoffs'), SQL(' '), Identifier('boolean'), SQL(' , '), Identifier('record_loser'), SQL(' '), Identifier('integer[]'), SQL(' , '), Identifier('broadcast'), SQL(' '), Identifier('varchar(20)'), SQL(' , '), Identifier('date'), SQL(' '), Identifier('date'), SQL(' , '), Identifier('id'), SQL(' '), Identifier('varchar (30)'), SQL(' , '), Identifier('home_team'), SQL(' '), Identifier('varchar (50)'), SQL(' , '), Identifier('record_winner'), SQL(' '), Identifier('integer[]'), SQL(' , '), Identifier('winner'), SQL(' '), Identifier('varchar (50)'), SQL(' , '), Identifier('loser'), SQL(' '), Identifier('varchar (50)'), SQL(' , '), Identifier('score_winner'), SQL(' '), Identifier('integer'), SQL(' , primary key ('), Identifier('id'), SQL(') );')])

Но когда я пытаюсьвыполнить этот sql.Composed экземпляр Я получаю сообщение об ошибке, что «integer» не является типом, где «integer» был элементом в списке, который я передал функции форматирования.

Разве нельзя также передать переменнуюТипы динамически с помощью psycopg2.sql, или, если это так, скажите, пожалуйста, как это сделать?

...