我在表中有10,000条记录。对于其中一种情况,我必须在每100条记录中只获取一条记录。我该怎么办?
我读了关于SET
/OFFSET
和LIMIT
。我想这样写:
def get_one_paczka_per_n_paczek(db: Session, sesja_id: int, per_n: int):
liczba = 0
lista = []
while True:
print(f"liczba elementów {len(lista)}")
element = db.query(PaczkaDanych).offset(liczba).first()
print(element)
if element is not None:
lista.append(element)
else:
break
liczba = liczba + per_n
return lista
也许在一个循环中存在比LIMIT
和SET
更聪明的东西?
如果你的表有一个自动加1的整数主键,那么你可以返回MOD(id, 100)
等于1
的行:
import sqlalchemy as sa
paczka = sa.Table("paczka", sa.MetaData(), autoload_with=engine)
with engine.connect() as conn:
results = conn.execute(
sa.select(paczka).where(sa.func.mod(paczka.c.id, 100) == 1)
).fetchall()
这并不一定是完美的,因为自动递增列不保证是完全顺序的(即,值中可能存在空白),但它可能"足够接近"。这取决于你的具体任务。