【发布时间】:2016-02-09 18:36:10
【问题描述】:
我的代码可用于从 Django 数据库中获取模型和字段。但是,它只适用于默认数据库。
此函数需要一个数据库名称,我想获取该数据库的表和字段。
def browse_datasource(request, dbname):
table_info = []
# This is what I'd /like/ to be able to do, but it doesn't work:
# tables = connections[dbname].introspection.table_names()
tables = connection.introspection.table_names()
found_models = connection.introspection.installed_models(tables)
for model in found_models:
tablemeta = model._meta
columns = [field.column for field in model._meta.fields]
table_info.append([model.__name__, columns])
如何对非默认数据库执行自省?例如,是否有正确的方法来获取名为“example”的数据库的 connection.introspection?
【问题讨论】:
-
关系不大,但你考虑过
python manage.py inspectdb > models.py吗? -
是的,这就是我最初创建一些模型的方式。这是为了允许用户浏览不同的数据库定义(可能带有不同的权限等)。
-
我也应该澄清一下,因为这可能很重要:我正在使用 1.8.x。
-
请问这样内省的目的是什么?如果您将所有内容都作为模型代码,那么您处理字段和表格不是更容易吗?
-
作为此应用程序的一部分,正在动态添加和删除数据库。
标签: python django django-models introspection django-database