小编典典

SQLAlchemy:从表名称获取模型。据我所知,这可能暗示将某些函数附加到元类构造函数中

python

我想要一个函数,给定一个表的名称,返回具有该 名的模型。例如:

class Model(Base):
    __tablename__ = 'table'
    ...a bunch of Columns

def getModelFromTableName(tablename):
   ...something magical

因此getModelFromTableName(’table’)应该返回Model类。

我的目标是在我制作的简单表单生成器中使用该函数,因为FormAlchemy不适用于python3.2,并且我希望它能够很好地处理外键。

谁能给我有关如何使getModelFromTableName工作的任何指示?

这是我的一个想法(可能是完全错误的,之前我没有使用过元类…)

如果我要让我的Model类继承自Base以及其他一些类(TableReg),并让TableReg的类元存储Model,该怎么办? 表名
在某些全局字典或辛格尔顿。

我意识到这可能完全不可行,因为Base的元类做了一些我不想破坏的非常重要且非常漂亮的东西,但是我认为必须有一种方法可以向元类添加一些构造函数代码我的模型。否则我不明白。


阅读 214

收藏
2020-12-20

共1个答案

小编典典

受伊芙评论的启发:

def get_class_by_tablename(tablename):
  """Return class reference mapped to table.

  :param tablename: String with name of table.
  :return: Class reference or None.
  """
  for c in Base._decl_class_registry.values():
    if hasattr(c, '__tablename__') and c.__tablename__ == tablename:
      return c
2020-12-20