当前位置: 首页 > 面试题库 >

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

堵彬彬
2023-03-14
问题内容

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

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的元类做了一些我不想破坏的非常重要且非常漂亮的东西,但是我认为必须有一种方法可以向元类添加一些构造函数代码我的模型。否则我不明白。


问题答案:

受伊芙评论的启发:

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


 类似资料:
  • 问题内容: 这些来自github上的spring amqp示例,位于https://github.com/SpringSource/spring-amqp- samples.git 这些是 什么类型的Java构造函数?它们是吸气剂和吸气剂的捷径吗? 与此相反 问题答案: 这些构造函数被重载以使用调用另一个构造函数。第一个无参数构造函数使用空参数调用第二个。第二呼叫的第三构造(未示出),其必须采取,

  • 问题内容: 在Flask-SQLAlchemy教程中,定义了User模型的构造函数: 对于具有两列的表,这可能是可以接受的,但是如果我有包含10列以上的表怎么办?每次定义新模型时 都 必须定义构造函数吗? 问题答案: 在大多数情况下,未在模型类中定义构造函数会为您提供正确的行为。 Flask- SQLAlchemy的基模型类(也是SQLAlchemy的声明性基类)定义了一个构造函数,该构造函数只接

  • 问题内容: 我想知道是否有人可以向我解释这种语法: 我不了解ClientOption发生了什么。指向客户端的函数类型会返回错误吗?然后在NewClient中,它看起来像接受了ClientOption类型的数组并返回了指向Client的新指针。我不确定这是否正确,是否有人可以解释得更多,或者给我一个类似于许多Javascript库所做的类比的不确定性, 在构造函数中。 问题答案: ClientOpt

  • 在问我的问题之前,我想把一些事情说清楚。首先,我是Java和编程的新手。第二,这是我的第一个帖子,所以如果我做错了什么,请宽容对待我。最后,我不想要任何具体的解决办法,我的任务在任何回应这篇文章。这些问题要我来解决。我想要的是一个解释,为什么我的测试代码不能编译/运行。为了更好地理解这个问题,我将粘贴赋值信息,然后是给定的驱动程序类,然后是驱动程序类访问的我的类代码。我的编译器错误显示在标题中,但

  • 考虑以下示例: 使用GCC 5.2编译会引发以下编译错误: 但是标准在14.6.5中说: 友元类或函数可以在类模板中声明。当模板被实例化时,其朋友的名称被视为在实例化点显式声明了专门化。 为什么编译失败?在GCC 3.4中,通过。

  • 从Kotlin开始,想要创建一个数据类