Merge pull request #4803 from Sowevo/v2

兼容负数的LIMIT
This commit is contained in:
jxxghp
2025-08-22 07:20:21 +08:00
committed by GitHub
+48 -32
View File
@@ -65,76 +65,92 @@ class TransferHistory(Base):
def list_by_title(cls, db: Session, title: str, page: Optional[int] = 1, count: Optional[int] = 30, def list_by_title(cls, db: Session, title: str, page: Optional[int] = 1, count: Optional[int] = 30,
status: bool = None): status: bool = None):
if status is not None: if status is not None:
return db.query(cls).filter( query = db.query(cls).filter(
cls.status == status cls.status == status
).order_by( ).order_by(
cls.date.desc() cls.date.desc()
).offset((page - 1) * count).limit(count).all() )
else: else:
return db.query(cls).filter(or_( query = db.query(cls).filter(or_(
cls.title.like(f'%{title}%'), cls.title.like(f'%{title}%'),
cls.src.like(f'%{title}%'), cls.src.like(f'%{title}%'),
cls.dest.like(f'%{title}%'), cls.dest.like(f'%{title}%'),
)).order_by( )).order_by(
cls.date.desc() cls.date.desc()
).offset((page - 1) * count).limit(count).all() )
# 当count为负数时,不限制页数查询所有
if count >= 0:
query = query.offset((page - 1) * count).limit(count)
return query.all()
@classmethod @classmethod
@async_db_query @async_db_query
async def async_list_by_title(cls, db: AsyncSession, title: str, page: Optional[int] = 1, count: Optional[int] = 30, async def async_list_by_title(cls, db: AsyncSession, title: str, page: Optional[int] = 1, count: Optional[int] = 30,
status: bool = None): status: bool = None):
if status is not None: if status is not None:
result = await db.execute( query = select(cls).filter(
select(cls).filter( cls.status == status
cls.status == status ).order_by(
).order_by( cls.date.desc()
cls.date.desc()
).offset((page - 1) * count).limit(count)
) )
else: else:
result = await db.execute( query = select(cls).filter(or_(
select(cls).filter(or_( cls.title.like(f'%{title}%'),
cls.title.like(f'%{title}%'), cls.src.like(f'%{title}%'),
cls.src.like(f'%{title}%'), cls.dest.like(f'%{title}%'),
cls.dest.like(f'%{title}%'), )).order_by(
)).order_by( cls.date.desc()
cls.date.desc()
).offset((page - 1) * count).limit(count)
) )
# 当count为负数时,不限制页数查询所有
if count >= 0:
query = query.offset((page - 1) * count).limit(count)
result = await db.execute(query)
return result.scalars().all() return result.scalars().all()
@classmethod @classmethod
@db_query @db_query
def list_by_page(cls, db: Session, page: Optional[int] = 1, count: Optional[int] = 30, status: bool = None): def list_by_page(cls, db: Session, page: Optional[int] = 1, count: Optional[int] = 30, status: bool = None):
if status is not None: if status is not None:
return db.query(cls).filter( query = db.query(cls).filter(
cls.status == status cls.status == status
).order_by( ).order_by(
cls.date.desc() cls.date.desc()
).offset((page - 1) * count).limit(count).all() )
else: else:
return db.query(cls).order_by( query = db.query(cls).order_by(
cls.date.desc() cls.date.desc()
).offset((page - 1) * count).limit(count).all() )
# 当count为负数时,不限制页数查询所有
if count >= 0:
query = query.offset((page - 1) * count).limit(count)
return query.all()
@classmethod @classmethod
@async_db_query @async_db_query
async def async_list_by_page(cls, db: AsyncSession, page: Optional[int] = 1, count: Optional[int] = 30, async def async_list_by_page(cls, db: AsyncSession, page: Optional[int] = 1, count: Optional[int] = 30,
status: bool = None): status: bool = None):
if status is not None: if status is not None:
result = await db.execute( query = select(cls).filter(
select(cls).filter( cls.status == status
cls.status == status ).order_by(
).order_by( cls.date.desc()
cls.date.desc()
).offset((page - 1) * count).limit(count)
) )
else: else:
result = await db.execute( query = select(cls).order_by(
select(cls).order_by( cls.date.desc()
cls.date.desc()
).offset((page - 1) * count).limit(count)
) )
# 当count为负数时,不限制页数查询所有
if count >= 0:
query = query.offset((page - 1) * count).limit(count)
result = await db.execute(query)
return result.scalars().all() return result.scalars().all()
@classmethod @classmethod