Как в SQLalchemy создать таблицу с названием столбцов из списка?

Мне нужно создать таблицу, столбцы которой будут генерироваться исходя из данных в списке, чтобы в дальнейшем к таблице можно было обращаться через ORM. Перечислять значения вручную не вариант, на практике элементов списка около тысячи. Как это можно сделать в sqlalchemy? Попробовал через цикл for, но в приведенном ниже примере столбец создается только для последнего элемента списка.

from sqlalchemy import create_engine, Column, Integer, String, DateTime, desc, MetaData, Table, insert
from sqlalchemy.engine.url import URL
from sqlalchemy.orm import registry, declarative_base

url_object = URL.create(
    "postgresql+psycopg2",
    port=5432,
    username="user",
    password="pass",
    host="localhost",
    database="base_name",
)

engine = create_engine(url_object)

metadata = MetaData(bind=engine)
Base = declarative_base()

example_list = ['name_1', 'name_2', 'name_3']


class Data(Base):
    __tablename__ = 'data'

    id = Column(Integer, primary_key=True)
    date_at = Column('created_at', DateTime)

    for column_name in example_list:
        item_name = Column(column_name + '_open', String)


    def __repr__(self):
        return "".format(self.code)

Base.metadata.create_all(engine)

Ответы (1 шт):

Автор решения: Maksim Alekseev
tests_columns = ['test_1', 'test_2', 'test_3', 'test_4']

class Data(Base): 
    __tablename__ = 'data' 

    # Создаем список из необходимых колонок
    columns = [Column(column, String(200), nullable=False) 
               for column in tests_columns]

    # Распаковываем колонки в таблицу
    data = Table(
        'data', 
        Base.metadata,
        Column('id', Integer(), primary_key=True),
        *columns
    )
    # вызываем Base.metadata.create_all(engine)
→ Ссылка