在SQLAlchemy中构建数据库之后,我想获取所有模型,也就是说,代表它们的类
>>> db
<SQLAlchemy engine='postgresql:///example'>
>>> ???
[<db.Model 'User'>, <db.Model 'Comment'>, <db.Model 'Article'>]
能做到吗?怎么样?
我可以体面地获得表格,而模型却不能。例如:
>>> for t in db.metadata.tables.items():
print(t)
这给表而不是模型本身
有几个相关的问题,但我没有看到完全相同的重复。
使用您的代码来获取表名,并使用该问题的可接受答案来获取类,我们可以将这些类与数据库中注册的表名进行匹配。
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
数据库中注册的模型列表在哪里。
尝试捕获是必需的,因为a<sqlalchemy.ext.declarative.clsregistry._ModuleMarker object>
将包含在for clazz in ...
循环中,并且它没有__tablename__
属性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句