LINUX.ORG.RU

SQLAlchemy. Повторная фильтрация результатов предыдущей фильтрации.

 ,


0

2

Всем привет. Только недавно начал пользоваться алхимией и встретился с такой сложностью. Имеется, к примеру, такая модель:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, Date, String

Base = declarative_base()

class Post(Base):
    __tablename__ = 'post'
    
    id = Column(String, primary_key=True)
    date = Column(Date)
    user_id = Column(Integer)
    title = Column(String)

Допустим, я хочу получить посты с какого-то числа

#я в курсе, что здесь будет list
posts = session.query(Post).filter(Post.date >= '2015-10-10').all()
Всё прекрасно, я получаю список постов. Но что если я хочу отфильтровать этот список еще по одному праметру, не делая еще один запрос в базу. То есть мне нужно получить посты, отфильтрованные по какому-либо параметру (сделав при этом запрос в базу и вытащив из нее эти данные), а потом фильтровать результаты по дргим полям, не делая при этом повторных запросов в базу.

Так вот, возможно ли такое? Если да, то как это сделать? Или помогите хотя бы составить правильный запрос в гугл, ибо я не смог.

Что, если попробовать так:

posts = session.query(Post)

postsFiltered1 = posts.filter(Post.date >= '2015-10-10').all()
postsFiltered2 = posts.filter(Post.date >= '2015-10-10', Post.date <= '2015-11-10').all()
xenohunter
()
Ответ на: комментарий от xenohunter

Не, тут как раз таки будет два запроса. При вызове методов all(), first(), one() и может еще других идет запрос в базу, то есть то что ты написал сделает два селекта в базе. Я же хочу чтобы был один селект, и чтобы эти данные полученные данные можно было отфильтровать еще раз средствами алхимии, без залезания повторно в базу данных.

gejzenbug
() автор топика
Ответ на: комментарий от pawnhearts

Пока так и делаю. Но разве средствами самой алхимии это никак не сделать?

gejzenbug
() автор топика
Ответ на: комментарий от uralbash

Не годится, posts в себе, по сути, будет содержать только сгенерированный sql запрос, а не сами данные. Ну и если я захочу отфильтровать потом posts по юзерам, то будет опять же второй запрос в базу.

gejzenbug
() автор топика
Ответ на: комментарий от xenohunter

Видимо так и придется. Пожалуй, закрою тему. Всем спасибо.

gejzenbug
() автор топика

А использовать логические операции к условиям запроса типа OR\AND ?

pylin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.