如何每百条记录获取一条记录 - SQLAlchemy,

How get one record per each hundred of records - SQLAlchemy,

数据库:mysql

ORM - python

中的 SQLAlchemy

我在 table 中有一万条记录。对于其中一种情况,我必须每百条记录中只有一条记录。我该怎么办?

我读到了 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

也许存在比在循环中使用 limitset 更聪明的东西?

如果您的 table 有一个自动递增 1 的整数主键,那么您可以 return 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()

这不一定是完美的,因为不能保证自动增量列是完全连续的(即值中可能存在间隙),但它可能“足够接近”,具体取决于您的具体任务。