Подтвердить что ты не робот

Как динамически создавать столбцы SQLAlchemy

У меня есть файл csv с первой строкой в ​​виде полей и оставшихся строк в качестве данных. С этим файлом я хотел бы создать таблицу. Поскольку поля довольно длинные и могут меняться, я хочу динамически их создать. После нескольких попыток и поиска я решил, что могу создать класс из factory, а затем назначить атрибуты новому классу могут генерировать динамические столбцы. Но это терпит неудачу. И, основываясь на ошибке, я пробовал другие методы, все провалилось. Пожалуйста помоги. Я рассматриваю возможность выполнения этой идеи.

Reader = csv.reader(open('Book1.csv', 'rb'), delimiter=',', quotechar='|')
TableItem = Reader.next()[0:]
def Factory(*args, **kwargs):
    args=args[0]
    def init(self, *iargs, **ikwargs):
        #setattr(self,__tablename__,ikwargs[__tablename__])
        for k,v in kwargs.items():
            setattr(self, k, v)
        for i in range(len(iargs)):
            setattr(self, args[i], iargs[i])
        for k,v in ikwargs.items():
            setattr(self, k, v)

    name = kwargs.pop("name", "myFactory")
    kwargs.update(dict((k, None) for k in args))
    return type(name, (object,), {'__init__': init})

LIS=Factory(TableItem)
class newLIS(LIS,Base):
    __tablename__='testonly'
    pass
mytest=[]
for row in Reader:
    mytest.append(newLIS(row))

Ошибка выглядит так:

sqlalchemy.exc.ArgumentError: Mapper Mapper|newLIS|testonly could not assemble
any primary key columns for mapped table 'testonly'
4b9b3361

Ответ 1

Я автор соответствующего ответа:

динамическое сопоставление sqlalchemy

У меня есть этот ответ на другой вопрос, который, я думаю, еще более связан - он может быть даже дубликат:

База данных "на лету" со сценариями

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