Найти - Пользователи
Полная версия: как бы исхитриться доставать из sqlite-таблицы каждый раз новую строку
Начало » Базы данных » как бы исхитриться доставать из sqlite-таблицы каждый раз новую строку
1
Игнат
собственно, ищу способ сделать универсальную функцию, которая позволит при каждом обращении к ней доставать из таблицы следующую по порядку строку

до этого информация хранилась в файлах и все работало так:
- файл грузится в память, в виде списка
- функция hlp.next(list) принимает в себя список, возвращает его первую строку и тут же её перемещает в списке в его конец (это удобно, т.к. в питоне переменная передается в функцию по ссылке изначально)
- в скрипте много раз вызываем hlp.next(list) и каждый раз получаем новую строку по порядку. причем список зациклен и в конце начинаем сначала

теперь эта информация переехала из файла в таблицу sqlite
с рандомной строкой все просто: select * from table order by RANDOM() limit 1;

а вот чтобы получать строки по порядку, им во-первых надо всем добавить столбец auto_id (авто инкремент), во-вторых в самом скрипте постоянно хранить ИД последней полученной строки, да и ещё и общее кол-во, чтобы по достижении конца начинать опять сначала (ну либо try-except при выборке из БД)

есть ли способ на уровне БД - доставать из неё строку так, чтобы эта строка автоматически перемещалась в конец таблицы?
Studentik
import sqlite3, itertools
cur=sqlite3.connect(":memory:").cursor()
cur.execute("CREATE TABLE test (line_no, data)")
for i in range(3):
cur.execute("INSERT INTO test SELECT ?, ?", (i, "data {}".format(i)))
myiter = itertools.cycle(cur.execute("SELECT * FROM test ORDER BY line_no DESC").fetchall())
for i in range(33):
print(next(myiter))
Игнат
спасибо, то что надо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB