Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django如何优化sql语句?_Python_Mysql_Django - Fatal编程技术网

Python django如何优化sql语句?

Python django如何优化sql语句?,python,mysql,django,Python,Mysql,Django,我的代码: 我使用django orm dynasty_li = ["USA", 'US', 'JPN'] data={} for dynasty in dynasty_li: data[dynasty]=People.objects.filter(dynasty=dynasty).order_by("-create_time")[:100] 如果使用sql dynasty_li = ["USA", 'US', 'JPN']

我的代码: 我使用django orm

dynasty_li = ["USA", 'US', 'JPN']

data={}
for dynasty in dynasty_li:
    data[dynasty]=People.objects.filter(dynasty=dynasty).order_by("-create_time")[:100]
如果使用sql

dynasty_li = ["USA", 'US', 'JPN']
data={}
for dynasty in dynasty_li:
    sql="select * from people group by dynast='{dynast}' order by create_time DESC"
    data[dynasty]=query(sql)
我认为应该分组,但不可能根据每个王朝从底部提取顶部N 我改进了我的sql语句

SELECT a.id,a.name,a.dynasty,a.create_time FROM people a
left OUTER join people b
on (a.dynasty=b.dynasty and a.id<b.id)
GROUP BY a.id
HAVING count(*)<4
ORDER BY dynasty,create_time
选择a.id、a.name、a.devention、a.create\u time FROM people a
左外接人b

在(a.degent=b.degent和a.id上,目标是什么?国家代码列表发生了什么变化?您希望输出中有多少行?3行还是10行

也许你想要:

SELECT a.id,a.name,a.dynasty,a.create_time
    FROM people a
    WHERE ( SELECT COUNT(*) FROM people b
               WHERE b.dynasty = a.dynasty
                 AND b.id > a.id
          ) > 4
    ORDER BY a.dynasty, a.create_time
索引:

INDEX(dynasty, id),
INDEX(dynasty, create_time)

如果朝代和人物是不同的模型,则使用朝代模型上的预回迁。否,是相同的模型