【问题标题】:How to query for SQLite database column names in Python/Django?如何在 Python/Django 中查询 SQLite 数据库列名?
【发布时间】:2016-09-23 18:17:35
【问题描述】:

我可以使用类似的方法从数据库中获取 Python 中特定 Django 模型的所有值

a = Attorney.objects.all().values_list()
print(a)

除了数据库中的所有列名之外,我会使用什么命令来进行类似的查询? 另外,我如何将Attorney.objects.all().values_list() 返回的所有值附加到我可以迭代的列表中?

【问题讨论】:

标签: python django sqlite django-queryset


【解决方案1】:

如果我理解正确,我认为以下内容可以满足您的要求。

import django.apps
models = django.apps.apps.get_models()
for model in models:
    field_names = [f.attname for f in model._meta.get_fields()]
    for fields in model.objects.values_list(*field_names):
        do_something_with_the_fields(fields)

让 Django 为您做这件事似乎很奇怪。您想通过获取 django 知道的所有表和字段名称来完成什么?

根据 cmets 中的进一步解释进行编辑

要将表的所有列转储到 CSV,最简单的方法可能是从数据库中检查游标返回的列元数据。在这种情况下没有太多理由使用 Django 的模型定义:

import csv
from django.db import connection

def dump_table_to_csv(db_table, io):
    with connection.cursor() as cursor:
        cursor.execute("SELECT * FROM %s" % db_table, [])
        rows = cursor.fetchall()
        writer = csv.writer(io)
        writer.writerow([i[0] for i in cursor.description])  # http://stackoverflow.com/a/9752485
        for row in rows:
            writer.writerow(row)


witb open('path/to/myfile.csv', 'wb') as f:
    dump_table_to_csv(django_model._meta.db_table, f)

【讨论】:

  • 我希望能够使用我的数据库中的列名自动填充 Excel 电子表格的标题,以便导出数据。不确定这是否是最好的方法,但我认为如果我直接从数据库中获取列名可能会有所帮助
  • 您可以尝试查看 django-import-export,它可能会完全满足您的要求:github.com/django-import-export/django-import-export 我还扩展了答案以包含一个更简单的解决方案独立于 Django。
猜你喜欢
  • 2021-05-20
  • 2015-07-15
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
相关资源
最近更新 更多