Я пытаюсь динамически создать таблицу в postgres с помощью psycopg2. Кажется, когда аргументы передаются, pyscopg2 не экранирует цитаты и не понимает мой запрос. Код выглядит так:
input_string_tup = ('col1 int', 'col2 varchar(2)', ...)
create_table_str = sql.SQL("CREATE TABLE {} ({data})").format(
sql.SQL(table_name),
data=sql.SQL(", ").join(sql.Composed(sql.Identifier(i) for i in input_string_tup)
))
execute_batch(cur, create_table_str, [input_string_tup])
Я получаю ошибку:
psycopg2.errors.SyntaxError: syntax error at end of input LINE 1: ...",
"shape_area numeric(8, 6)", "shape_length numeric(8, 6)")
^
Что выводит print (create_table_str.as_string (conn)):
CREATE TABLE my_table ("col1 int", "col2 varchar(2)", "col3 int", ... )
Изменить, чтобы показать измененный ответ, который работает без объединения строк
input_string_tup = (('col1', 'int'), ('col2, varchar(2)'), ...)
create_table_str = sql.SQL("CREATE TABLE {} ({data})").format(
sql.SQL(table_name),
data=sql.SQL(", ").join(sql.Composed([sql.Identifier(i[0]),
sql.SQL(' '), sql.SQL(i[1])]) for i in input_string_tup))
Спасибо Адриану за помощь