Python 在sqlalchemy中,如何只使用不同的表名快速定义相同的表模型(calss)?

Python 在sqlalchemy中,如何只使用不同的表名快速定义相同的表模型(calss)?,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我有10个表,除了表名外,其他表都完全相同。我不想把10张桌子合并成一张。现在我尝试使用sqlalchemy将数据插入这些表中。我发现我在代码中重复执行以下操作: class tableA(DeclarativeBase): __tablename__ = "A" id = Column(Integer, primary_key=True) title = Column('title', String(200)) link = Column('link', Str

我有10个表,除了表名外,其他表都完全相同。我不想把10张桌子合并成一张。现在我尝试使用sqlalchemy将数据插入这些表中。我发现我在代码中重复执行以下操作:

class tableA(DeclarativeBase):
    __tablename__ = "A"
    id = Column(Integer, primary_key=True)
    title = Column('title', String(200))
    link = Column('link', String(200))

class tableB(DeclarativeBase):
    __tablename__ = "B"
    id = Column(Integer, primary_key=True)
    title = Column('title', String(200))
    link = Column('link', String(200))
    ......
    ......
class tableH(DeclarativeBase):
    __tablename__ = "H"
    id = Column(Integer, primary_key=True)
    title = Column('title', String(200))
    link = Column('link', String(200))

我可以使用一个带有表名的通用表类作为输入吗?

是的,有几种方法可以做到这一点,每种方法都有不同程度的详细性和灵活性:

公共基类 混合 动态
类型

非常感谢。很多东西需要学习,我最终决定使用动态类型,它工作得很好@既然如此,请接受答案。谢谢。还有一个问题,在使用dynamic type之前,我可以简单地使用create_all()创建数据库中的所有10个表(如果不存在)。现在我需要再添加几个表(比如说现在20个表),我发现使用动态类型方式,create_all()不起作用(显然不起作用),我得到一个错误,说新表在我的数据库中不存在。您对如何处理这个问题有什么建议吗?@BushengLou
create_all()
如果您动态创建类,它仍然有效。使用
type()
和使用
class Foo
语法来创建一个类实际上没有什么区别。是的,你是对的。现在一切都很好。谢谢。
class Foo(DeclarativeBase):
    __abstract__ = True
    id = Column(Integer, primary_key=True)
    title = Column('title', String(200))
    link = Column('link', String(200))

class tableA(Foo):
    __tablename__ = "A"
class Foo(object):
    id = Column(Integer, primary_key=True)
    title = Column('title', String(200))
    link = Column('link', String(200))

class tableA(Foo, DeclarativeBase):
    __tablename__ = "A"
def create_table(name):
    return type("table" + name, (DeclarativeBase,), {
        "__tablename__": name,
        "id": Column(Integer, primary_key=True),
        "title": Column('title', String(200)),
        "link": Column('link', String(200)),
    })

tableA = create_table("A")