Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2011 20:22:07

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

как бы исхитриться доставать из sqlite-таблицы каждый раз новую строку

собственно, ищу способ сделать универсальную функцию, которая позволит при каждом обращении к ней доставать из таблицы следующую по порядку строку

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

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

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

есть ли способ на уровне БД - доставать из неё строку так, чтобы эта строка автоматически перемещалась в конец таблицы?



Офлайн

#2 Май 29, 2011 21:00:16

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

как бы исхитриться доставать из sqlite-таблицы каждый раз новую строку

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))



Офлайн

#3 Май 30, 2011 10:22:12

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

как бы исхитриться доставать из sqlite-таблицы каждый раз новую строку

спасибо, то что надо



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version