最近在学习sqlalchemy,有个动态修改__tablename__的需求,搜索了好几天,没有太完美的答案,要么看不懂,要么比较古老了,通过研究,整理以下几种sqlalchemy动态修改__tablename__的方法:
一、函数封装table model
在table model类外层嵌套函数,通过函数参数传递table name给dbmodel类,代码如下:
def make_model(_BOOKNAME):
Model = declarative_base() # 生成一个SQLORM基类
class table_model(Model):
__tablename__ = _BOOKNAME
ID = Column(INTEGER(10), primary_key=True)
BOOKNAME = Column(VARCHAR(255), nullable=False)
INDEX = Column(INTEGER(10), nullable=False)
ZJNAME = Column(VARCHAR(255), nullable=False)
ZJTEXT = Column(TEXT, nullable=False)
ZJHERF = Column(VARCHAR(255), nullable=False)
return table_model
调用时 table = make_model('tablename') 即可取得model类
比较固定,仅简单传递参数
二、定义所有表对应的父类