Форум сайта python.su
собственно, ищу способ сделать универсальную функцию, которая позволит при каждом обращении к ней доставать из таблицы следующую по порядку строку
до этого информация хранилась в файлах и все работало так:
- файл грузится в память, в виде списка
- функция hlp.next(list) принимает в себя список, возвращает его первую строку и тут же её перемещает в списке в его конец (это удобно, т.к. в питоне переменная передается в функцию по ссылке изначально)
- в скрипте много раз вызываем hlp.next(list) и каждый раз получаем новую строку по порядку. причем список зациклен и в конце начинаем сначала
теперь эта информация переехала из файла в таблицу sqlite
с рандомной строкой все просто: select * from table order by RANDOM() limit 1;
а вот чтобы получать строки по порядку, им во-первых надо всем добавить столбец auto_id (авто инкремент), во-вторых в самом скрипте постоянно хранить ИД последней полученной строки, да и ещё и общее кол-во, чтобы по достижении конца начинать опять сначала (ну либо try-except при выборке из БД)
есть ли способ на уровне БД - доставать из неё строку так, чтобы эта строка автоматически перемещалась в конец таблицы?
Офлайн
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))
Офлайн
спасибо, то что надо
Офлайн