如何在Python / Django中查询SQLite数据库列名?

How to query for SQLite database column names in Python/Django?

我可以使用类似于

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

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


如果我理解正确的话,我想像下面这样的事情可以满足你的要求。

1
2
3
4
5
6
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知道的所有表和字段名,您试图完成什么?

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

要将一个表的所有列都转储到一个csv,可能最容易从数据库内省光标返回的列元数据。在这种情况下,没有太多理由使用Django的模型定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)