有没有办法在单个查询中获取表行和表数据的总数

时间:2018-10-04 04:55:34

标签: python django django-orm

问题是,要获取计数和表数据,我必须在Django中两次访问数据库。例如:

count = queryset.count() # To get count
data = queryset.values('columns') # To get data

有没有办法在单个查询中获取数据。一种解决方案是使用len()函数,但是将较大的表加载到RAM中并不是很好。

在mysql中,我明白了,但是如何通过Django ORM执行

SELECT t1.count, id FROM table1, (select count(*) as count FROM table1) as t1 limit 10;

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我的意思是,len应该只在首先获取数据时才计算内存中已有的内容,因此它应该比对数据库的两次查询更好。

data = queryset.values('columns') # To get data
count = len(data) # To get count from database records in memory

无论如何,对于没有Django文档的模型层的直接数据库查询:

from django.db import connection

def my_custom_sql(self):
    with connection.cursor() as cursor:
        cursor.execute("SELECT t1.count, id FROM table1, (select count(*) as count FROM table1) as t1 limit 10")
        row = dictfetchall(cursor)

    return row