Мне удалось создать таблицу SQL с динамически определенными столбцами, благодаря отражению класса Python.Но я не могу запустить код более одного раза.Например, следующий import_file должен создать статическую таблицу и динамическую таблицу с конкретными столбцами.Это работает, если я запускаю его один раз.Но во второй раз происходит сбой и возвращается следующая ошибка:
Table 'dynamic' is already defined for this MetaData instance
Пример кода:
from sqlalchemy import Column, Integer, String, Float, Boolean, Table
from sqlalchemy import create_engine, MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.orm import clear_mappers
import os
def import_file(filename, columns):
path = filename
if os.path.exists(path):
os.remove(path)
engine = create_engine(f"sqlite:///{path}", echo=True)
clear_mappers()
Base = declarative_base()
class StaticTable(Base):
__tablename__ = "static"
id = Column(Integer, primary_key=True)
name = Column(String)
class DynamicTable(Base):
__tablename__ = "dynamic"
id = Column(Integer, primary_key=True)
for c in columns:
setattr(DynamicTable,c,Column(String))
Base.metadata.create_all(engine)
import_file("test.db", columns = ["age","test"]) # WORKS
import_file("test2.db", columns= ["id","age","foo","bar"]) # NOT WORKING
Я пытаюсь использовать sqlalchemy.orm.clear_mappers , ноunsucessfully.Любая идея, как я могу решить это?