Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 14418

SQLAlchemy filter on Query again got extra junk rows

$
0
0

I have Django experience. Now I would like to try some DIY python packages to my mini project. I Here is my code.

models.py

import enumfrom datetime import date, datetimefrom sqlalchemy import UniqueConstraintfrom sqlmodel import Field, SQLModelclass StatusEnum(enum.Enum):"""Enum class of status field."""    pending = "pending"    in_progress = "in_progress"    completed = "completed"class TaskContent(SQLModel, table=True):"""Model class for TaskContent history."""    identifier: str = Field(primary_key=True)   # For redo mechanism    id: int = Field(primary_key=False)  # For human use    title: str = Field(nullable=True)    description: str = Field(nullable=True)    due_date: date = Field(default=None, nullable=True)    status: StatusEnum = Field(default=StatusEnum.pending)    is_deleted: bool = Field(default=False)  # For redo mechanism    created_by: int = Field(nullable=True, default=None, foreign_key="user.id")    created_at: datetime = Field(default=datetime.now())  # For redo mechanismclass CurrentTaskContent(SQLModel, table=True):"""Model class for current."""    # https://github.com/tiangolo/sqlmodel/issues/114    __table_args__ = (UniqueConstraint("identifier", "id"), )    identifier: str = Field(primary_key=True)   # For redo mechanism    id: int = Field(primary_key=False)  # For human use    created_by: int = Field(nullable=True, default=None, foreign_key="user.id")    updated_by: int = Field(nullable=True, default=None, foreign_key="user.id")    created_at: datetime = Field(default=datetime.now())    updated_at: datetime = Field(default=datetime.now())class User(SQLModel, table=True):"""User model of this application."""    id: int = Field(primary_key=True)    username: str = Field(nullable=False)

main.py

def get_queryset() -> sqlalchemy.orm.query.Query:"""Get the queryset of tasks."""    with (Session(engine) as session):        # List out available id.        available_id_list = session.query(CurrentTaskContent).all()        available_identifier_list = [i.identifier for i in available_id_list]        # Get task and id        queryset_tasks = session.query(TaskContent).filter(            TaskContent.identifier.in_(available_identifier_list)        ).subquery()        # Get username and id        username_query = session.query(User.username, User.id).subquery()        # Join the queryset and username        final_query = session.query(queryset_tasks, username_query).outerjoin(            username_query, and_(queryset_tasks.c.created_by == username_query.c.id)        )        return final_query

The tasks_queryset.count() is 5 which is correct. My database has only 5 rows.Then I try to filter again by due_date with the following.

Problem:
aa and bb both of them shows me 25 which is not what I need.

aa = tasks_queryset.filter(tasks_queryset.subquery().c.due_date == due_date_instance)bb = tasks_queryset.filter(TaskContent.due_date == due_date_instance)

Question:
How to filter the tasks_queryset with given due_date?


Viewing all articles
Browse latest Browse all 14418

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>