【问题标题】:Django how to get all the column names from the given sql table (model.py)Django如何从给定的sql表(model.py)中获取所有列名
【发布时间】:2021-06-28 05:51:38
【问题描述】:

我正在尝试从 Django (model.py) 中的给定 SQL 表中获取所有列。我发现大多数教程都在讨论使用列名获取特定列。就我而言,我可以期待将来出现未知的列,我希望在 Django 仪表板中看到它们。是否有任何可能的方法可以从给定表中获取所有列名而不在 model.py (Django) 中提供任何列名?

【问题讨论】:

  • 如果你给定的 SQL 表是一个字符串。也许这样做的唯一方法是使用 from django.db import connection 执行 sql 查询 cursor.execute()

标签: python sql django database


【解决方案1】:

你可以试试下面

from .model import MyModel

all_fields = MyModel._meta.fields
#or
all_fields = MyModel._meta.get_fields

文档:https://docs.djangoproject.com/en/3.2/ref/models/meta/

【讨论】:

  • view.py 中的上述行实际上将返回我们已经在 manage.py 中初始化的列名。我想知道我们是否可以在不初始化 model.py 中的任何列的情况下获取整个列/表。谢谢
【解决方案2】:

检索模型的所有字段实例

MyModel.get_fields(include_parents=True, include_hidden=False)

返回与模型关联的字段元组。 get_fields() 接受两个参数,可用于控制返回哪些字段:

include_parents

  • 默认为真。
  • 递归地包含在父类上定义的字段。
  • 如果设置为 False,get_fields() 将仅搜索直接在当前模型上声明的字段。
  • 直接从抽象模型或代理类继承的模型中的字段被认为是本地的,而不是父级的。

include_hidden

  • 默认为假。
  • 如果设置为 True,get_fields() 将包含用于支持其他字段功能的字段。
  • 这还将包括任何具有以“+”开头的相关名称(例如 ManyToManyField 或 ForeignKey)的字段。

get_fields() 返回一个元组,每个元素都是一个Model字段类型,不能直接作为字符串使用。所以,field.name 会返回字段名

my_model_fields = [field.name for field in MyModel._meta.get_fields()]

以上代码将返回一个包含所有字段名称的列表

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2020-01-05
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    相关资源
    最近更新 更多