【问题标题】:How get one record per each hundred of records - SQLAlchemy,如何每百条记录获取一条记录 - SQLAlchemy,
【发布时间】:2023-03-10 21:55:01
【问题描述】:

数据库:mysql

ORM - Python 中的 SQLAlchemy

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

我阅读了有关 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 更智能的东西?

【问题讨论】:

    标签: mysql database sqlalchemy


    【解决方案1】:

    如果您的表有一个自增 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()
    

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

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      相关资源
      最近更新 更多