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

时间:2018-09-02 22:07:23

标签: python sql sqlite

我正在运行这段代码,我肯定可以输出可用行的任何列,但是当我尝试在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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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 ...;