gpt4 book ai didi

Python sqlite fetchmany 和 fetchall 返回有序结果

转载 作者:行者123 更新时间:2023-12-01 06:01:03 29 4
gpt4 key购买 nike

我注意到 Python sqlite fetchall() 和 fetchmany() 语句以排序的键顺序而不是原始键顺序返回结果。例如,考虑:

list_indexes = [9, 5, 2, 8, 3, 7]

indexsize = len(list_indexes)
cursor.arraysize = indexsize

cursor.execute("select index, details from this_table where index in (%s)" % ','.join('?' * len(list_indexes)), list_indexes)
rows = cursor.fetchmany(indexsize)

返回的行顺序是按键顺序排序的 [2, 3, 5, 7, 8, 9]。

我错过了什么还是这是默认行为?如果是这样,除了按参数索引对行重新排序的明显方法之外,还有其他解决方法吗?

最佳答案

这是正常行为。除非您在查询中指定 ORDER BY,否则结果中的行顺序是未定义的。如果您有一些可用于排序的字段(例如日期),则应该使用它。

您可以使用临时表来执行您想要的操作:

; prepare test table
CREATE TABLE this_table (`index` INTEGER, record_details TEXT);
INSERT INTO this_table VALUES (1, 'a1');
INSERT INTO this_table VALUES (2, 'a2');
; ...
INSERT INTO this_table VALUES (10, 'a10');

; do the query
CREATE TEMP TABLE good_indexes(number INTEGER, i integer);
INSERT INTO good_indexes(number, i) VALUES (1, 4);
INSERT INTO good_indexes(number, i) VALUES (2, 2);
INSERT INTO good_indexes(number, i) VALUES (3, 6);

SELECT record_details FROM this_table, good_indexes
WHERE good_indexes.i = this_table.`index` ORDER BY good_indexes.number;
; result: a4, a2, a6

DROP TABLE good_indexes;

关于Python sqlite fetchmany 和 fetchall 返回有序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10462737/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com