flask - 从flask-sqlalchemy db获取所有模型

标签 flask sqlalchemy flask-sqlalchemy

在 SQLAlchemy 中构建数据库后,我想获取所有模型,也就是说,代表它们的类

>>> db
<SQLAlchemy engine='postgresql:///example'>
>>> ???
[<db.Model 'User'>, <db.Model 'Comment'>, <db.Model 'Article'>]

这能实现吗?怎么样?

我可以体面地拿到 table ,只是没有模型。例如:
>>> for t in db.metadata.tables.items():
        print(t)

这给出了表格而不是模型本身

最佳答案

有几个相关的问题,但我没有看到任何完全重复的问题。

使用您的代码获取表名,以及 this question的接受的答案来获取类,我们可以将类与在您的数据库中注册的表名进行匹配。

classes, models, table_names = [], [], []
for clazz in db.Model._decl_class_registry.values():
    try:
        table_names.append(clazz.__tablename__)
        classes.append(clazz)
    except:
        pass
for table in db.metadata.tables.items():
    if table[0] in table_names:
        models.append(classes[table_names.index(table[0])])

哪里models是在您的数据库中注册的模型列表。

try catch 是必需的,因为 <sqlalchemy.ext.declarative.clsregistry._ModuleMarker object>将包含在 for clazz in ... 中循环,它没有 __tablename__属性。

关于flask - 从flask-sqlalchemy db获取所有模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514823/

相关文章:

python - SQLAlchemy 与 MemSQL 上的语法错误

python - 在不创建对象的情况下,sqlalchemy 中关系的另一端是什么类型?

python - 在 Flask-SQLAlchemy 和 Celery 的 celery 任务中正确管理 postgresql 连接

sqlalchemy - 使用 Flask-SQLAlchemy 自动映射多个数据库

python - 属性错误 : can't set attribute when connecting to sqlite database with flask-sqlalchemy

python - 使用 Reactjs 和 Flask 上传文件

python - Flask View 中的 ajax 发布数据

python - 我如何在 sqlalchemy 中连接两个 ORM 表,但返回两列?

Flask + WTForms - 在 FormList 中显示字段

python - 如何创建 pandas "link"(href) 样式?