Я пытаюсь динамически создавать таблицы с помощью 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, или, если это так, скажите, пожалуйста, как это сделать?