sqlite-курсор выполняет только одну строку в цикле for - PullRequest
0 голосов
/ 03 сентября 2018

Я выполняю этот код, я определенно могу вывести любой столбец доступных строк, но когда я пытаюсь вставить новые результаты в цикл 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 и упорядочил ее по Счету

Это мой ДБ

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете упростить ситуацию, используя одно выполнение, используя 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 как понял SQLite - INSERT - 2. Вставить в таблицу SELECT ...;

0 голосов
/ 03 сентября 2018

При фиксации вставки может быть сброшен курсор выбора, как описано в этом отчете об ошибке: https://bugs.python.org/issue23129 Попробуйте создать список результатов внутри цикла, а затем вставить их вне цикла. Это также поможет с производительностью

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...