Я предполагаю, что вы передаете values
в createTable
как нечто итеративное. Я бы удалил парантез вокруг ({values})
и использовал бы следующее для format
:
"""
CREATE TABLE {table_name} {values}
""".format(table_name=table_name, values=tuple(values) if len(values) > 1 else "({})".format(values[0]))
Итак, ломая values=tuple(values) if len(values) > 1 else "({})".format(values[0])
мы имеем
tuple(values)
:
При создании таблицы в sqlite имена столбцов должны быть заключены в круглые скобки, поэтому я обычно использую тип кортежа для принудительного применения этого в format
для оператора печати. tuple(values)
гарантирует, что независимо от типа итерируемого values
(как, например, список), он будет преобразован в итерируемый кортеж.
if len(values) > 1
:
Вы должны использовать tuple(values)
только тогда, когда переданный values
содержит более одного элемента. В противном случае SQL, который будет выполнен, будет выглядеть примерно так:
CREATE TABLE my_table_name (col_1,)
Что заставит sqlite пожаловаться на эту запятую без значения второго столбца.
else "({})".format(values[0])
:
В противном случае, если values
имеет только один элемент, индексируйте его и явно поместите в скобки в строке.