Python 在sqlalchemy中,如何只使用不同的表名快速定义相同的表模型(calss)?
我有10个表,除了表名外,其他表都完全相同。我不想把10张桌子合并成一张。现在我尝试使用sqlalchemy将数据插入这些表中。我发现我在代码中重复执行以下操作: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
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")