sqlite游标只在for循环中执行一行

问题描述 投票:0回答:2

我正在运行此代码,我绝对可以输出任何可用行的列,但是当我尝试在for循环中插入新结果时,它只插入第一行然后停止。

这里的目标是通过两个不同的参数对行进行排序,我确实有那些我希望按sqltime然后按分数排序的新闻文章。

我尝试做SELECT Title, Description, URL, IMGLink, Score FROM today ORDER BY Score DESC, sqltime ASC,但只执行了第一个参数而忽略了另一个参数。

我在想创建一个单独的表可以解决这个问题;这是代码:

for row in cursor.execute("SELECT Title, Description, URL, IMGLink, Score FROM main"):
    nline = (row[0], row[1], row[2], row[3], row[4])
    cursor.execute('INSERT INTO today (Title, Description, URL, IMGLink, Score) VALUES (?, ?, ?, ?, ?)', (nline))
    conn.commit()

我只需访问today表并按分数订购

This is my db

python sql sqlite
2个回答
0
投票

您可以使用INSERT INTO表SELECT .....使用单个执行来简化问题。

例如SQL可能是: -

INSERT INTO today (Title,Description,URL,IMGLink,Score) SELECT Title, Description, URL, IMGLink, Score FROM main ORDER BY Score DESC;

您可能不需要光标,但您可能希望获得结果(受影响的行数,即插入数)。

您可以查看: -

SQL As Understood By SQLite - INSERT - 2. INSERT INTO table SELECT ...;


1
投票

提交插入可能会导致选择光标重置,如此错误报告中所述:https://bugs.python.org/issue23129尝试在循环内构建结果列表,然后将它们插入循环之外。这也有助于提高性能

© www.soinside.com 2019 - 2024. All rights reserved.