@Johnem

Как сделать отрицательное смещение в sqlite?

Здравствуйте. Проясню суть вопроса: при указании в запросе параметра OFFSET, он работает лишь с положительными числами (если OFFSET отрицательный, то sqlite, похоже, вообще его игнорирует). Вот мое костыльное решение:
import sqlite3

def get_data(id, date, limit=1, offset=0):
    con = sqlite3.connect('db.db')
    cur = con.cursor()
    data = []
    if offset < 0:
        cur.execute('SELECT * FROM db WHERE id == ? AND date >= '
                    '(SELECT date FROM db WHERE date <= ? '
                    'ORDER BY _rowid_ DESC LIMIT 1 OFFSET ?) LIMIT ?',
                    (id, date, -offset, limit))
    else:
        cur.execute('SELECT * FROM db WHERE id == ? AND date >= ? '
                    'LIMIT ? OFFSET ?',
                    (id, date, limit, offset))
    for row in cur.fetchall():
        data.append({'date': datetime.date.fromisoformat(row[1]),
                       'name': row[2], 'address': row[3]})
    return data
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 2
В SQL по стандарту OFFSET всегда должен быть >=0, по тому никак не заставишь его быть отрицательным.
Ваш костыльный вариант вполне приемлим.
Но я бы лишний раз подумал, нужна ли эта фича вообще.
Ответ написан
Комментировать
@prochanev
Ничего не понимаю :) А что если отсортировать в обратном порядке и применить обычный OFFSET? :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы